Jag behöver ett sätt att ange sökvägen till en fil. Jag bygger en liten webbplats med ASP.NET och använder en Access-databas. Databasen ligger i rooten på mitt projekt. All åtkomst till databasen sker genom en klass.
Hittills har alla mina aspx-sidor också legat under rooten. I min databas-klass angav jag följande "sökväg" till databasen:
Jag trodde jag hittat en lösning som skulle fungera vart än jag flyttade min webbapplikation. Men när jag skapade sidor i en undermapp till rooten så fungerar det inte lägre.
Så frågan lyder:
Hur kan jag skriva en sökväg som når filen "minDatabas.mdb" som fungerar oavsett var webbsidorna ligger i hierarkin och oavsett var jag flyttar min webbapplikation (t.ex. lokalt eller till ett webbhotell)?
Jag använder ofta "~/" då jag skriver sökvägar till bilder etc. i tagg-attribut (i taggar med runat="server") och det fungerar fint. Men till det här verkar det inte fungera.
Jag ska alltså ha sökvägen till min Access-databas för att använda den i en connection-string:
Detta fungerade så länge alla mina webbsidor låg i rooten coh därmed på samma ställe som min databas. Men när jag nu har sidor i undermappar så fungerar det inte lägre.
HttpContext.Current.Server.MapPath("minDatabas.mdb") står i min klass, som ligger i App_Code. Mina aspx-sidor använder sig av denna klass för att kommunicera med databasen. Men det verkar som att sökvägen som skapas med denna kod i databas-klassen på nått sätt utgår ifrån den aspx-sida som använder databas-klassen. Det är iaf så jag har tolkat det. Hur som helst så fungerar det inte.
Vad gäller Web.config: Vad ska jag skriva för sökväg där? Får jag inte samma problem ändå, bara att jag flyttar problemet till en annan fil? Det är ju en XML-fil så jag kan väl inte hålla på med Server-MapPath där heller?
Det måste vara nån som har löst det här problemet. Det borde återkomma varje gång man gör ett projekt med en Access-databas och vill kunna flytta sin applikation utan att behöva ändra i den.
Public Shared Function ConnectionString() As String
Dim conn As Object = HttpContext.Current.Cache("connection")
If (conn = Nothing) Then
Dim s As String = ConfigurationManager.ConnectionStrings("AccessDB").ConnectionString
s = String.Format(s, Server.MapPath(""))
HttpContext.Current.Cache("connection") = s
Return s
End If
Return CType(conn,String)
End Function
Våra svar är dock olika. Med mitt alternativ så kan man flytta applikationen utan att behöva ändra sökvägen. Nyckelsakerna är placeholdern {0} i söksträngen
Ok, om vi säger att jag vill köra på modellen att hårdkoda sökvägen i Web.config...
Hur skriver jag en absolut sökväg till min databas när den ligger uppe på mitt webhotell? När jag testar lokalt kan jag ju skriva "E:\\osv...", men hur skriver jag när den ligger uppe på en server?
Jag har Loopia som webhotell om det är till någon hjälp...
Hur skriver jag en absolut sökväg till min databas när den ligger uppe på mitt webhotell? När jag testar lokalt kan jag ju skriva "E:\\osv...", men hur skriver jag när den ligger uppe på en server?
På samma vis. Ta reda på sökvägen genom följande rad: