Saschas Weblog

ESCde Developer Blog

  Home :: Kontakt :: RSS Feed
  30 Posts :: 0 Artikel :: 10 Kommentare :: 32 Trackbacks

Archiv

Post Kategorien

ESCde

ESCde Blogger

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.

veröffentlicht am 02.07.2007 23:37