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.
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);
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="Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;"" providerName="System.Data.EntityClient" />
Vielen Dank
ck.Nitin (TinTin)
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
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.
<?xml version="1.0"?>
<configuration>
<appSettings>
<!--FailIfMissing=false -->
<add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>
</appSettings>
</configuration>
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");
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"
};
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
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.
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")