wake-up-neo.com

Verbindungszeichenfolge mit relativem Pfad zur Datenbankdatei

Ich lade Daten aus der SDF-Datenbank in der Winforms-App. Ich verwende den vollständigen Pfad zur Datenbankdatei. Beispiel:

conn = new SqlCeConnection

{

ConnectionString ="Data Source=F:\\My Documents\\Project1\\bin\\Debug\\Database.sdf"

};

Ich möchte einen relativen Pfad zur Datenbankdatei verwenden. Zum Beispiel. Ich habe eine Sdf-Datei im Ordner F:\Eigene Dateien\Project1\bin\Debug\Data\file.sdf und möchte einen relativen Pfad in der Verbindungszeichenfolge verwenden. Irgendein Rat ? Vielen Dank.

36
Martin

Relativer Pfad:

ConnectionString = "Data Source=|DataDirectory|\Database.sdf";

Ändern von DataDirectory als Pfad der ausführbaren Datei:

string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
string path = (System.IO.Path.GetDirectoryName(executable));
AppDomain.CurrentDomain.SetData("DataDirectory", path);
85
Nime Cloud

Verwenden Sie diesen Code für das Arbeitsverzeichnis, wenn die Datenbankdatei wie folgt vorhanden ist.

D:\HMProject\DataBase\HMProject.sdf

string Path = Environment.CurrentDirectory;
string[] appPath =  Path.Split(new string[] { "bin" }, StringSplitOptions.None);
AppDomain.CurrentDomain.SetData("DataDirectory", appPath[0]);

Verbindungszeichenfolge für die .sdf-Datei

<add name="LocalDB" connectionString="metadata=res://*/Client.HMProject.csdl|res://*/Client.HMProject.ssdl|res://*/Client.HMProject.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;&quot;" providerName="System.Data.EntityClient" />

Vielen Dank

ck.Nitin (TinTin)

5
Ck.Nitin

Relativ zu was, Ihrer Bewerbung? In diesem Fall können Sie den aktuellen Pfad der Anwendungen einfach mit folgendem Befehl abrufen:

System.Environment.CurrentDirectory 

Und hängen Sie es an die Verbindungszeichenfolge an

4
RC1140

Nach einigen seltsamen Fehlern mit relativen Pfaden in connectionstring hatte ich das Bedürfnis, dies hier zu posten.

Bei Verwendung von "| DataDirectory |" oder "~" dürfen Sie nicht mit "../" auf und ab gehen!

Beispiel verwendet mehrere Projekte, die auf dieselbe localdb-Datei zugreifen, die sich in einem der Projekte befindet.

"~ /../ other" und "| DataDirectory | /../ other" schlagen fehl

Auch wenn es eindeutig geschrieben ist hier bei MSDN den Fehlern gab es ein wenig unklar, so schwer zu finden und konnte es hier bei SO nicht finden.

3
tomg
   <?xml version="1.0"?>  
<configuration>  
  <appSettings>  
    <!--FailIfMissing=false -->  
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>  
  </appSettings>  
</configuration>  
1
william

Ich habe dies in der Datei web.config gemacht. Ich fügte Sobhans Antwort hinzu, danke übrigens.

<connectionStrings>
    <add name="listdb" connectionString="Data Source=|DataDirectory|\db\listdb.sdf"/>
  </connectionStrings>

Dabei wird "db" zu meinem Datenbankverzeichnis anstelle von "App_Data" 

Und normalerweise geöffnet mit:

var db = Database.Open ("listdb"); 

0
pat

Versuchen Sie es bitte mit dem folgenden Codeblock. Genau das, wonach Sie suchen:

SqlConnection conn = new SqlConnection
{
    ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf"
};
0
Elias Hossain

Geben Sie in Ihrer Konfigurationsdatei den relativen Pfad an

ConnectionString = "Data Source=|DataDirectory|\Database.sdf";

Ändern Sie das DataDirectory in Ihren ausführbaren Pfad

string path = AppDomain.CurrentDomain.BaseDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", path);

Wenn Sie EntityFramework verwenden, können Sie den DataDirectory-Pfad in Ihrer Context-Klasse festlegen

0
Sobhan

Ich hatte das gleiche Problem, als ich versuchte, den relativen Dateipfad für eine Datenbank anzugeben, die mit einer Windows Forms-Anwendung verbunden ist. Ich konnte das Problem beheben, indem ich die Anweisungen zum Hinzufügen einer Datenquelle zu Windows Forms von Microsoft befolge (z. B. zum Verbinden einer Access-Datenbank ). 

Bei Verwendung dieser Methode legt Visual Studio die relativen Dateipfade für Sie in Ihrer Datenbank fest, anstatt zu versuchen, sie manuell festzulegen. Wenn sich Ihre Datenbank außerhalb Ihrer Anwendung befindet, erstellt sie eine Kopie der Datenbank und fügt sie Ihrer Anwendung am richtigen Ort hinzu. Obwohl Sie Ihre Verbindungszeichenfolge in App.config und/oder Settings.settings oder in einem Ihrer Skripts manuell ändern können, habe ich festgestellt, dass diese Methode fehleranfällig ist. Stattdessen habe ich es am besten gefunden, im Allgemeinen die Anweisungen von Microsoft zu befolgen. 

0
Billy Raseman

Das hat bei mir funktioniert:

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
    + HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")
    + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

Ich frage eine XLSX-Datei ab, mache dir also keine Gedanken über die anderen Elemente in der Verbindungszeichenfolge, außer über die Datenquelle.

Meine Antwort lautet also:

HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")
0
styler1972