Tällainen vasta "korkeammalla iällä" koodaamisesta innostunut (ja opinnot suorittanut) jantteri kyselee otsikossa mainitusta virheestä. Näytölle ilmestyvä virhe on siis kokonaisuudessaan seuraava:
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified /inc/Connheader.asp, line 6
Connheader.asp puolestaan näyttää tältä:
<% '***Create database connection with ADODB object: Dim OBJdbConnection Set OBJdbConnection = Server.CreateObject("ADODB.Connection") OBJdbConnection.Open Application("ConnectionString") %>
Kyseinen ConnectionString puolestaan löytyy global.asa tiedostosta
Itse en ole kyseisiä tiedostoja luonut, vaan ne ovat olleet eräässä vanhassa sovelluksessa, jonka olen päivittänyt nykypäivään noin vuosi sitten. Kun otin tietokannan ja koodit talteen, pyöri sovellus Windows Server 2003:ssa. Nyt olen aloittamassa uutta projektia, johon tämä sovellus käy hyvin pohjaksi. Nyt palvelimena toimii Windows Server 2008. Serveri on ylhäällä ja joku perus asp koodi, esim <% Response.Write ("mä toimin t:ASP") %>, toimii hyvin ja olen Registry Editorissa antanut Microsoftin omien ohjeiden mukaisesti oikeuksia, mutta herjaa vain puskee. Mikä siis neuvoksi?
Tarkista että tuo DSN=<tietokanta> kohdassa mainittu <tietokanta> on määriteltynä ODBC:n järjestelmätietolähteissä. Mahdollisesti vanhassa järjestelmässä oli ko. määritys tehtynä.
System DSN:stä löytyy SQL Server Native Client 10.0, johon on määritelty oletustietokannaksi tuo kyseinen kanta. Ja ODBC.ini kansiosta löytyy myös kyseinen tietokanta, mutta ODBCINST.ini:stä ei. Onko tuossa tietolähteessä sitten jotain väärin, vai missähän mahtaa mättää?
Jos sulla on 64-bittinen järjestelmä, niin siellä on erilliset ODBC-asetukset 32-bittiselle ja 64-bittiselle puolelle. Windows 10:ssä molemmat on jo selvästi kumpikin näkyvissä mutta muistaakseni vanhemmissa piti hakea erikseen 32-bittinen.
Virheilmoitus joka tapauksessa viittaa siihen, että ASP-ympäristölle määritellyn nimistä DSN:ää ei näy. Jos se näkyisi niin virheilmoitus ei olisi "Data source name not found..."
Tässä on pari viikkoa kamppailtu, mutta ei tunnu ongelmat ratkeavan. Tajusin määrittää applikaation IIS:ssä, mutta muuta ei tapahtunut kuin herjan muutos. Kun ConnectionString on seuraava,
data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
niin tulee tällainen virhe:
Microsoft OLE DB Service Components error '80040e21' Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done. /inc/Connheader.asp, line 6
Mikäli ConnectionString näyttää tältä,
DSN=<tietokanta>;uid=<tunnus>;pwd=<salasana>
niin herja on silloin seuraava, vaikka käyttäjätunnus ja salasana olisivat käyttäjän, joka on SQL management studiossa määritetty login ja olla on db_owner oikeus. Myös lupa database engineen kirjautumiseksi on myönnetty.
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot open database "bw_extranet" requested by the login. The login failed. /inc/Connheader.asp, line 6
Mikähän tässä nyt menee pieleen?
Vaikea sanoa tuohon ensimmäiseen kun ei tiedä mitä Connheader.asp -tiedoston rivillä 6 on. Mahdollisesti se saa yhteyden tietokantaan, mutta kyselyn syntaksi ei ole yhteensopivaa tai sitten jokin muu virhe.
Jälkimmäisessä tapauksessa palvelusi näyttäisi siltä, että käyttäjätunnus tai salasana on virheellinen tai niillä ei ole käyttöoikeutta tietokantaan bw_extranet tai sinulla ei ole lainkaan tietokantaa bw_extranet vaikka se on määritelty DNS:ssä tai käyttäjän asetuksissa oletuskannaksi.
Jos oikeasti olet käyttänyt viikon työaikaa tuon selvittelyyn, niin suosittelisin palkkaamaan jonkun katsomaan sitä systeemiä ja säätämään vaikka yhdessä kanssasi kuntoon. Tuskin osaavalta menisi puolta tuntia kauempaa jos koneelle saa etäyhteyden.
Grez kirjoitti:
Vaikea sanoa tuohon ensimmäiseen kun ei tiedä mitä Connheader.asp -tiedoston rivillä 6 on. Mahdollisesti se saa yhteyden tietokantaan, mutta kyselyn syntaksi ei ole yhteensopivaa tai sitten jokin muu virhe.
En ole käyttänyt työaikaa tähän, vaan on ihan oma projekti, jossa on tarkoitus käyttää vanhaa pohjana. Tuo kyseinen connheader.asp koodi löytyy ketjun ensimmäisestä viestistä, mutta laitetaan nyt vielä.
<% '***Create database connection with ADODB object: Dim OBJdbConnection Set OBJdbConnection = Server.CreateObject("ADODB.Connection") OBJdbConnection.Open Application("ConnectionString") %>
ja Application("ConnectionString") löytyy global.asa tiedostosta:
Sub Application_OnStart Application("ConnectionString") = "DSN <tietokanta>;uid=<käyttäjä>;pwd=<salasana>" End Sub
Ja tosiaan olen tuohon stringiin kokeillut tunnuksia, joilla todellakin on käyttöoikeus kyseiseen tietokantaan. Tietokanta on myös olemassa (palautettu .BAK tiedostosta).
LahisK kirjoitti:
En ole käyttänyt työaikaa tähän, vaan on ihan oma projekti
No laskisin omankin ajan työajaksi, jos tekee jotain mikä ei ole kivaa. Silloin siis tekee työtä itselleen.
Tarkoitin siis tuota kun sanoit, että "on pari viikkoa kamppailtu". Tai ehkä tarkoitit että vartin verran yhteensä ko. aikana, mutta siinä tapauksessa kuulostaa kovin dramaattiselta.
Jos olet palauttanut tietokannan BAK-tiedostosta eri palvelimelle, kuin mistä se on alunperin varmistettu, niin luultavasti käyttöoikeudet ei ole kunnossa.
Muussa tapauksessa katso onko siellä tietokannassa orpoutuneita käyttäjiä
EXEC sp_change_users_login @Action='Report'
Tietenkin jos olet jo manuaalisesti lisännyt käyttöoikeudet ko. kantaan palauttamisen jälkeen, niin sitten asian pitäisi olla kunnossa. Varmuuden vuoksi kannattaa kokeilla kirjautua kantaan samoilla tunnuksilla kuin mitä skripti käyttää.
LahisK kirjoitti:
Tuo kyseinen connheader.asp koodi löytyy ketjun ensimmäisestä viestistä, mutta laitetaan nyt vielä.
Oops, tämä oli oma moka kun ei enää muistanut mitä kaikkea ketjun alussa oli. Mutta tosiaan aika outo virheilmoitus tuolle riville. Tuossa siis käytit Windows-käyttäjätunnistusta (Integrated Sercurity) tietokannalle. Eli silloin voisi kysyä että onko palvelua ajavalla käyttäjätunnuksella (luultavasti joku IIS APPPOOL\YourAppPoolName ) käyttöoikeus ko. tietokantaan.
Täsmennetään nyt vielä, että käytän tähän projektiin pari tuntia silloin ja toiset pari tuntia tällöin. Ja kyllä tämä on meikäläisestä ihan kivaa, vaikka sql serveri ei oikein tunnukaan yhteistyökykyiseltä :P
Tietokannasta löytyi kaksi orpoa, joita olen koittanut korjata seuraavalla tavalla
USE <tietokanta>; GO sp_change_users_login @Action='update_one', @UserNamePattern='<käyttäjänimi>', @LoginName='<login_nimi>'; GO
Ja
USE <tietokanta>; GO sp_password @old=NULL, @new='<salasana>', @loginame='<login>'; GO
Myös autofixiä olen kokeillut, mutta nuo kyseiset kaksi käyttäjää näytetään silti orpoina. Tuolla apppoolilla ei ollut käyttöoikeuksia, mutta lisäsin ne ja näistä toimenpiteistä huolimatta sama herja vain puskee ruutuun.
Aihe on jo aika vanha, joten et voi enää vastata siihen.