Stringa di connessione con percorso relativo al file di database

Carico i dati dal database sdf nell’app Winforms. Io uso il percorso completo per il file di database. Esempio :

conn = new SqlCeConnection { ConnectionString ="Data Source=F:\\My Documents\\Project1\\bin\\Debug\\Database.sdf" }; 

Mi piacerebbe utilizzare un percorso relativo al file di database. Per esempio. Ho un file sdf nella cartella F: \ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf e voglio usare il percorso relativo nella stringa di connessione. Qualche consiglio? Grazie.

Percorso relativo:

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

Modifica di DataDirectory come percorso dell’eseguibile:

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

Prova questo codice nella directory di lavoro se il file di database esiste come di seguito.

D: \ HMProject \ Database \ HMProject.sdf

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

Stringa di connessione per file .sdf

Grazie

ck.Nitin (TinTin)

Rispetto a cosa, la tua applicazione? Se è così allora puoi semplicemente ottenere il percorso corrente delle applicazioni con:

 System.Environment.CurrentDirectory 

E aggiungilo alla stringa di connessione

Dopo alcuni strani errori con i relativi percorsi nel connectiontring ho sentito la necessità di postare questo qui.

Quando si utilizza “| DataDirectory |” o “~” non ti è permesso salire e uscire usando “../”!

Esempio sta usando diversi progetti che accedono allo stesso file localdb inserito in uno dei progetti.

“~ /../ other” e “| DataDirectory | /../ altro” non funzioneranno

Anche se è chiaramente scritto su MSDN qui gli errori che ha dato dove un po ‘poco chiaro è così difficile da trovare e non sono riuscito a trovarlo qui su SO.

         

Per favore, prova con il codice sottostante, che è esattamente quello che stai cercando:

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

Questo ha funzionato per me:

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\"";

Sto interrogando un file XLSX quindi non preoccuparti di nessuno degli altri elementi nella stringa di connessione, ma l’origine dati.

Quindi HttpContext.Current.Server.MapPath("\\myPath\\myFile.db") è la risposta.

Nel tuo file di configurazione fornisci il percorso relativo

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

Cambia DataDirectory sul tuo percorso eseguibile

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

Se si utilizza EntityFramework, è ansible impostare il percorso DataDirectory nella class Context

Ho fatto questo nel file web.config. Ho aggiunto alla risposta di Sobhan, grazie mille.

    

Dove “db” diventa la directory del mio database invece della directory “App_Data”.

E aperto normalmente con:

var db = Database.Open (“listdb”);