Das hat mich einige Zeit gekostet: per Code eine OleDbConnection zu einer Access Datenbank zu öffnen, die im ConnectionStrings-Abschnitt der web.config Datei mit einem relativen Pfad konfiguriert ist.
Während das AccessDataSource Control in der DataFile-Eigenschaft eine relative Pfadangabe wie
DataFile="~/App_Data/datenbank.mdb"
richtig umzusetzen weiß, funktioniert das nicht mir einer Connection, die in der web.config konfiguriert ist. Obwohl "DataSource=<absoluter Datenbankpfad>" einwandfrei funktioniert, brachten weder
<connectionStrings>
<add name="DatenbankConnectionString"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=~App_Data/datenbank.mdb"
providerName="System.Data.OleDb"/>
</connectionStrings>
noch folgende Variationen des ConnectionStrings den gewünschten Erfolg:
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
Data File=~App_Data/datenbank.mdb"connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
DataFile=~App_Data/datenbank.mdb"
Die Lösung:
"~App_Data/" muss im ConnectionString der web.config Datei durch "|DataDirectory|" ersetzt werden.
<connectionStrings>
<add name="DatenbankConnectionString"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=|DataDirectory|datenbank.mdb"
providerName="System.Data.OleDb"/>
</connectionStrings>
Dann lässt sich eine OleDbConnection im Code mit
OleDbConnection db = new OleDbConnection(
ConfigurationManager.ConnectionStrings["DatenbankConnectionString"].ConnectionString);
db.Open();
wie gewünscht öffnen.
Das gleiche gilt auch für Verbindungen zu SQLExpress-Datenbanken.