Строка подключения с относительным путем к файлу базы данных

Я загружаю данные из базы данных sdf в winforms App. Я использую полный путь к файлу базы данных. Пример :

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

Мне нравится использовать относительный путь к файлу базы данных. Например. У меня есть файл sdf в папке F: \ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf, и я хочу использовать относительный путь в строке соединения. Любой совет ? Спасибо.

Относительный путь:

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

Изменение DataDirectory в качестве пути исполняемого файла:

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

Попробуйте этот код в рабочем каталоге, если файл базы данных существует, как показано ниже.

D: \ HMProject \ DataBase \ HMProject.sdf

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

Строка подключения для файла .sdf

благодаря

ck.Nitin (TinTin)

Относительно чего, ваше приложение? Если это так, вы можете просто получить приложения current Path с:

 System.Environment.CurrentDirectory 

И добавьте его в строку подключения

После нескольких странных ошибок с относительными путями в строке соединения я почувствовал необходимость опубликовать это здесь.

При использовании «| DataDirectory |» или «~» вам не разрешено увеличивать и увеличивать использование «../»!

Пример состоит в том, что несколько проектов получают доступ к одному файлу localdb, размещенному в одном из проектов.

«~ /../ other» и «| DataDirectory | /../ other» не удастся

Даже если в MSDN четко написано здесь ошибки, которые он дал, где немного неясно, так сложно найти и не мог найти его здесь в SO.

         

Не могли бы вы попытаться использовать блок кода, который именно вы ищете:

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

Это сработало для меня:

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

Я запрашиваю файл XLSX, поэтому не беспокойтесь о каком-либо другом материале в строке подключения, кроме источника данных.

Таким образом, HttpContext.Current.Server.MapPath("\\myPath\\myFile.db") является ответом.

В вашем файле конфигурации укажите относительный путь

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

Измените DataDirectory на свой исполняемый путь

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

Если вы используете EntityFramework, вы можете установить путь DataDirectory в своем classе Context

Я сделал это в файле web.config. Я добавил к ответу Собхана, спасибо кстати.

    

Где «db» становится моей базой данных вместо каталога «App_Data».

И открылся нормально с:

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

  • В чем разница между соединением и таймаутом чтения для сокетов?
  • проверить подключение к Интернету в cocoa-приложении
  • Мгновенно обнаруживать отключение клиента от серверного сокета
  • Eclipse: Не удалось подключиться к удаленной виртуальной машине. В соединении отказано.
  • Код необходимости создания пула соединений в java
  • Соединение RMI отказалось на localhost
  • Hibernate Slow для получения соединения Postgres
  • HttpClient 4.0.1 - как освободить соединение?
  • Что именно влияет на URLConnection.setDoOutput ()?
  • Запустить командный файл с командой psql без пароля
  • Можно ли использовать статический экземпляр java.sql.Connection в многопоточной системе?
  • Давайте будем гением компьютера.