webForumDet fria alternativet

Fel sökväg till access-databas

.NET

16 svar · 947 visningar · startad av inspiro

Medlem sedan sep. 2005673 inlägg
Frågan#1

Hej! Har problem med att hitta en access-databas när jag skickar upp den på hotellet. Har provat en hel drös med varianter, exempelvis Server.MapPath, men det står bara att den inte hittas. Hur skriver man sökvägen till databasen egentligen?

Vill helst ha sökvägen i web.config och den ligger i roten. Likaså gör access-databasen det. Webbfilerna ligger dock i en mapp.

Webbhotellet är Loopia och de kunde inte hjälpa mig tyvärr och deras kodexempel fungerar inte.

Felmeddelandet:

'sökväg [...] AccessDB.mdb' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.

Medlem sedan dec. 20014 239 inlägg
#2

I .NET är det väl bra om du lägger den i en katalog som heter App_Data under rooten.

Root på .NET språk = ~

Connectionstring i web.config

<connectionStrings> 
<add name="accessConStr" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source= |DataDirectory|db1.mdb" providerName="System.Data.OleDb"  />
</connectionStrings>
Medlem sedan sep. 2005673 inlägg
#3

Det är så jag gör ungefär, fast sökvägen blir fel hela tiden. Har testat att ha databasen i olika mappar, ändra sökvägen hit och dit... exempel

~/databas.mdb
Server.MapPath("databas.mdb")
\\sökväg\\databas.mdb
mapp/databas.mdb
osv...

Skriver jag bara sökvägen från roten försöker den leta efter databasen i c:\windows\system32\inetsrv\... ??? Vad jag än skriver så hittar den inte filen!

Medlem sedan dec. 20014 239 inlägg
#4

Visa lite kod hur du gör.

/r
På webservern skapar du app_data och placerar din accessdatabas där
Modifierar din web.config så den passar den databas du lagt upp.

Medlem sedan sep. 2005673 inlägg
#5

Under appsettings i config har jag deklarerat connectionsträngen (och där har jag provat alla möjliga sökvägar):

<add key="ConnStr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databas.mdb"/>

Sen på sidan där jag har min db-koppling:

string ConnStr= ConfigurationManager.AppSettings["ConnStr"];

Funkar hur bra som helst lokalt men inte på hotellet, men lokalt har jag ju angett den fysiska sökvägen på disken och den vet jag ju inte vilken den är på hotellet. Server.MapPath ger mig en url (som inte fungerar).

Medlem sedan sep. 2005673 inlägg
#6

Oki, nu har jag lagt databasen i en mapp som heter App_Data. Hur ska sökvägen i config se ut? Skriver jag så här:

<add key="ConnStr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=App_Data/databas.mdb"/>

...så får jag följande fel:

'c:\windows\system32\inetsrv\App_Data\databas.mdb' is not a valid path

Medlem sedan dec. 20014 239 inlägg
#7

ConnectionStrings är en egen section i web.config

ConfigurationManager.ConnectionString["ConnStr"]

så prova me exemplet du fick tidigare i app_data & web.config

Medlem sedan sep. 2005673 inlägg
#8

Samma resultat. Är det egentligen någon skillnad på dem mer än namnet? Har testat att hårdkoda in den så det är inte web.config som är problemet utan själva sökvägen till filen.

Måste jag ha den fysiska sökvägen för att det ska fungera?

Medlem sedan dec. 20014 239 inlägg
#9

I exemplet jag gav först ska databasen ligga i app_data katalogen

sedan används den connectionstring i web.config som jag angav.

Så ja den fysiska sökvägen app_data måste finnas

Medlem sedan sep. 2005673 inlägg
#10

Hur får man tag på den fysiska sökvägen? Server.MapPath ger mig den fysiska sökvägen när jag kör lokalt men på loopia får jag en ipadress i början?

Medlem sedan dec. 20014 239 inlägg
#11

Men om du använder mitt exempel behöver du inte bry dig om Server.MapPath

Exempel web.config:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
	<connectionStrings>
<add name="accessConStr" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source= |DataDirectory|db1.mdb" providerName="System.Data.OleDb"  />
   	</connectionStrings>
</configuration>

Exempel på att få ut Connectionstring

string ConnStr= ConfigurationManager.ConnectionString["accessConStr"];

Jag förstår inte varför du ska blanda in Server.MapPath i sammanhanget?

Medlem sedan sep. 2005673 inlägg
#12

Vad ska det stå istället för |DataDirectory|? Om jag skriver App_Data så blir det samma fel som förut.

Måste skriva ConfigurationManager.ConnectionString["accessConStr"].ConnectionString; för att det ska fungera och den innehåller den exakt samma connectionstring som tidigar? Eller tänker jag fel?

Medlem sedan dec. 20014 239 inlägg
#13

Du ska inte byta ut |Data Directory|
Bara byta ut så det passar med vad din accessdatabas heter. Inget annat.

/r

ConfigurationManager.ConnectionString["accessConStr"].ConnectionString;

Du har helt rätt här, mitt misstag.

Medlem sedan sep. 2005673 inlägg
#14

Samma meddelande tyvärr, snyft blir galen... :(

'c:\www\webvol2\1x\dt7drv7qicxcqud\mindomän\public_html\App_Data\databas.mdb' is not a valid path.
Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.

Databasen ligger i App_Data och har verkligen rätt namn, har kollat det minutiöst noga! Så det borde ju funka. Kan det här meddelandet ha någon helt annan orsak? Fel behörigheter på filen eller nåt?

Medlem sedan dec. 20014 239 inlägg
#15

Var får du felmeddelandet?

Alltså var i koden får du det?

Medlem sedan sep. 2005673 inlägg
#16

När jag försöker använda min connectionstring... OleDbDataAdapter(SqlString, ConnString);

Nu ska ta ett djupt andetag, backa några steg och göra ett nytt försök i morgon tror jag, är säkert nåt slarvfel nånstans. Tack för all hjälp! (y)

Medlem sedan sep. 20011 914 inlägg
#17

Lite gammal kod.

I web.config

<configuration>
   <appSettings>
      <add key="ConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}\Data\databas.mdb;User Id=;Password=;"  />
   </appSettings>
</configuration>

I C#

public static string ConnectionString()
{
   object conn = HttpContext.Current.Cache["connection"];

   if(conn == null)
   {
      string s = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
      s = string.Format(s, Server.MapPath(""));
      HttpContext.Current.Cache["connection"] = s;
      return s;               
   }
   return (string)conn;
}

I vb.net

    Public Shared Function ConnectionString() As String
        Dim conn As Object = HttpContext.Current.Cache("connection")
        If (conn = Nothing) Then
            Dim s As String = System.Configuration.ConfigurationSettings.AppSettings("ConnectionString")
            s = String.Format(s, Server.MapPath(""))
            HttpContext.Current.Cache("connection") = s
            Return s
        End If
        Return CType(conn,String)
    End Function
266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)