web-dev-qa-db-fra.com

Chaîne de connexion avec chemin relatif au fichier de base de données

Je charge les données de la base de données sdf dans l'application Winforms. J'utilise le chemin complet du fichier de base de données. Exemple :

conn = new SqlCeConnection

{

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

};

Je voudrais utiliser un chemin relatif au fichier de base de données. Par exemple. J'ai un fichier sdf dans le dossier F:\Mes documents\Project1\bin\Debug\Data\fichier.sdf et je veux utiliser un chemin relatif dans la chaîne de connexion. Aucun conseil ? Je vous remercie.

36
Martin

Chemin relatif:

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

Modification de DataDirectory en tant que chemin d’exécutable:

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

Essayez ce code dans le répertoire de travail si le fichier de base de données existe comme ci-dessous.

D:\HMProject\DataBase\HMProject.sdf

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

Chaîne de connexion pour le fichier .sdf

<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" />

Merci

ck.Nitin (TinTin)

5
Ck.Nitin

Par rapport à quoi, votre application? Si c'est le cas, vous pouvez simplement obtenir le chemin actuel des applications avec:

System.Environment.CurrentDirectory 

Et l'ajouter à la chaîne de connexion

4
RC1140

Après plusieurs erreurs étranges avec des chemins relatifs dans connectionstring, j'ai ressenti le besoin de poster ceci ici.

Lorsque vous utilisez "| DataDirectory |" ou "~" vous n'êtes pas autorisé à utiliser "../"!

Exemple: plusieurs projets accédant au même fichier localdb placé dans l’un des projets.

"~ /../ other" et "| DataDirectory | /../ other" échouent

Même s'il est clairement écrit ici chez MSDN les erreurs qu’il a engendrées étaient un peu obscures, difficiles à trouver et ne pouvaient pas les trouver ici à SO.

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

Je l'ai fait dans le fichier web.config. J'ai ajouté à la réponse de Sobhan, merci au fait.

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

Où "db" devient le répertoire de ma base de données au lieu du répertoire "App_Data". 

Et ouvert normalement avec:

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

0
pat

Souhaitez-vous essayer avec le bloc de code ci-dessous, qui correspond exactement à ce que vous recherchez:

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

Dans votre fichier de configuration, indiquez le chemin relatif

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

Changez le DataDirectory en votre chemin exécutable

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

Si vous utilisez EntityFramework, vous pouvez définir le chemin d'accès DataDirectory dans votre classe de contexte.

0
Sobhan

J'ai eu le même problème en essayant de spécifier le chemin de fichier relatif pour une base de données connectée à une application Windows Forms. J'ai pu résoudre le problème en suivant les instructions pour l'ajout d'une source de données à Windows Forms à partir de Microsoft (par exemple, pour la connexion d'une base de données Access ). 

En utilisant cette méthode, Visual Studio définira pour vous les chemins d'accès aux fichiers relatifs à votre base de données au lieu d'essayer de le définir manuellement. Si votre base de données est externe à votre application, une copie de la base de données sera créée et ajoutée à votre application à l'emplacement approprié. Bien que vous puissiez modifier manuellement votre chaîne de connexion dans App.config et/ou Settings.settings ou dans l'un de vos scripts, j'ai trouvé cette méthode sujette aux erreurs. Au lieu de cela, je trouve préférable de suivre les instructions de Microsoft, en général. 

0
Billy Raseman