29. juni 2003 - 11:23Der er
30 kommentarer og 1 løsning
Problemer med databaseadgang
Hej Eksperter!
Jeg har lavet en lille webapplikation i Visual Studio, som jeg gerne vil have knyttet en Access-database til. Det har jeg gjort i form af OleDbDataAdapter, OleDbConnection og et DataSet, men når jeg forsøger at køre webapplikationen, får jeg en fejl i følgende linie:
oleDbDataAdapter1.Fill(brugerSet1);
Fejlen lyder:
Microsoft Jet-databasemotoren kan ikke åbne filen "C:\Inetpub\wwwroot\Forum\webtjepDB.mdb". Den er allerede åbnet med udelt adgang af en anden bruger, eller du skal have tilladelse til at vise dataene.
Jeg er imidlertid sikker på, at databasen ikke er åbnet idet jeg forsøger at køre applikationen, - i hvert fald ikke åbnet af mig!!!
Lige umiddelbart kan der ikke være så meget andet galt. Men du kan se om din accessbase stadig er åben, hvis der er en file som hedder *.ldb. Det er en buffer som access bruger. Hvis den er der kan du prøve at genstarte og hvis den stadig er der prøv at omdøbe den.
I min søgning har jeg fundet følgende, som måske rummer noget af forklaringen, - jeg kan bare ikke finde ud af at gøre noget ved det (og bemærk, at jeg bruger en access-database!:
"Under installationen af Visual Studio .NET blev der oprettet en windows user ved navn ASPNET. Den windows account benyttes også til at tilgå data i din SQL Server database. Hvis der under installationen af Visual Studio .NET ikke er givet tilladelse til at denne user kan tilgå data i din SQL Server database må du selv give tilladelsen. Hvis der ikke er givet tilladelse kaster ovenstående sætning en SqlException. Du kan vælger at addere ASPNET useren til den eller de databaser du vil give adgang til. Du kan selvfølgelig også helt slå sikkerheds check fra på din database."
Det er ret sandsynligt at du i dine programmeringsforsøg har fået åbnet databasen, men ikke lukket den igen. Husk altid at kalde MyOleDbConnection.Close() når du er færdig med at hente data. Dette gælder OGSÅ hvis der opstår en fejl. Derfor skal du altid benytte try/catch til at fange fejl i DB processeringen, så du er sikker på at du får lukket DB'en igen.
Jeg har prøvet ovenstående, - og det får siden til at køre, idet fejlen i databaseforbindelsen bliver fanget! - Men desværre løser det ikke problemet, - nemlig at der er en fejl, - og jeg har stadig ikke nogen forbindelse til databasen - af samme årsag som tidligere....
Kan det skyldes, at jeg har brugt nogle af de drag-and-drop komponenter der findes i toolboxen, - og er det udelukket, at det rent faktsik skyldes en eller anden ASPNET-bruger??
I stedet for at køre med en direkte sti, har du så prøvet med en ODBC-datakilde. Det vil også give dig mulighed for at ligge databasen et andet sted på serveren hvor den ikke kan ses udefra.
Det kan ikke være nogle af componenter du bruger. Jeg vil dog lige sige at jeg plejer at bruge en SqlConnection og SqlDataAdapter.
Man kan da stadig ligge databasen uden for www-roden! ODBC er langsomt. OleDb er klart at foretrække, og så kræves det heller ikke at udbyderen skal betales for at sætte en odbc op.
nielsbeck: Eftersom ASPNET brugeren default har fuld adgang til wwwroot, og databasen allerede ligger i C:\Inetpub\wwwroot\Forum\ er dette næppe et problem.
odegaard: Kunne du ikke skrive i et lidt pænere sprog, det kan godt virke lidt nedsættende. Jeg har ikke et problem med det, men nu når vi forsøger at hjælpe hinanden, kan man godt tale ordenligt.
mads: Hvor er det lige at jeg skriver nedsættende? Jeg forsøger at hjælpe en med at løse et problem. Det har jeg aldrig før hørt skulle være nedsættende.
ASPNET brugeren har ikke default fuld adgang til wwwroot...havde det i hvert fald hverken på min XP eller 2003 server (desuden er det næppe nogen god idé at ligge din DB under wwwroot).
Problemet er løst, måske lidt kluntet, - men det virker! - Jeg har givet ASPNET-brugeren administratorrettigheder, - men ville vel formodentlig kunne nøjes med at give den rettigheden til at "læse alle ikke personlige filer"??
nielsbeck får pointene i denne omgang, men I andre får nu også tak for hjælpen!
Jeg er ikke helt sikker på, at jeg ved hvad du mener! - Hvor kan jeg styre rettigheder til disken? - (For du mener vel ikke, at det er i selve databasen jeg skal give adgang... - det har jeg nemlig prøvet - uden held)?
Højreklik på databasen ude i Explorer, vælg Properties, vælg fanebladet Security. Find derefter ASPNET-brugeren og marker Allow for punktet Full Control...
Okay... så har du slået "Use simple filesharing" til... ved ikke lige hvad det hedder i en dansk Windows, så du får det lige på engelsk :-) Du skal op i Tools i Exploreren, vælg Folder Options og så fanebladet View. Nederst i Advanced Settings finder du "Use simple filesharing", som du fjerner hakket i. Nu vil du kunne se fanebladet Security, når du er inde i properties for en fil.
Tak for det, det var en god forklaring! - Jeg har nu sat rettighederne for VS(Visual Studio) til "Fuld Kontrol", men nu får jeg fejlmeddelelsen "Filen kan ikke låses" - altså en anden besked end tidligere...??
Rettighederne for VS.NET? Det er rettighederne for databasefilen (C:\Inetpub\wwwroot\Forum\webtjepDB.mdb) der skal ændres, så ASPNET-brugeren har Fuld Kontrol...
Jamen det er også det jeg har gjort (tror jeg..- ASPNET-brugeren hedder bare noget andet, når jeg er inde under Sikkerheds-fanen.. - og det gør de andre brugere også!!!)??
Nu kan jeg faktisk få det til at virke, hvis jeg vel at mærke giver "fuld kontrol" til hele mappen - hvori databasen ligger. - Det virker ikke, når jeg blot forsøger at give "fuld kontrol" til selve databasen...???
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.