Строка подключения с относительным путем к файлу базы данных - PullRequest
37 голосов
/ 02 декабря 2009

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

conn = new SqlCeConnection

{

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

};

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

Ответы [ 10 ]

87 голосов
/ 04 августа 2011

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

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);
6 голосов
/ 19 декабря 2012

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

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

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

Спасибо

ск. Нитин (TinTin)

4 голосов
/ 02 декабря 2009

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

System.Environment.CurrentDirectory 

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

3 голосов
/ 09 апреля 2013

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

При использовании «| DataDirectory |» или "~" вам не разрешено подниматься и выходить, используя "../"!

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

«~ /../ прочее» и «| DataDirectory | /../ прочее» завершится ошибкой

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

1 голос
/ 02 августа 2015
   <?xml version="1.0"?>  
<configuration>  
  <appSettings>  
    <!--FailIfMissing=false -->  
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>  
  </appSettings>  
</configuration>  
0 голосов
/ 05 декабря 2018

У меня возникла та же проблема при попытке указать относительный путь к файлу для базы данных, подключенной к приложению Windows Forms. Мне удалось решить эту проблему, следуя инструкциям по добавлению источника данных в Windows Forms от Microsoft (например, для подключения базы данных Access ).

Используя этот метод, Visual Studio установит относительные пути к файлам для вашей базы данных вместо того, чтобы пытаться установить это вручную. Если ваша база данных является внешней по отношению к вашему приложению, она создаст копию базы данных и добавит ее в ваше приложение в нужном месте. Хотя вы можете вручную изменить строку подключения в App.config и / или Settings.settings или в одном из ваших сценариев, я обнаружил, что этот метод подвержен ошибкам. Вместо этого я решил, что лучше всего следовать инструкциям Microsoft.

0 голосов
/ 04 апреля 2017

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

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

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

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

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

0 голосов
/ 03 декабря 2016

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

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

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

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

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

0 голосов
/ 24 апреля 2012

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

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")
0 голосов
/ 06 декабря 2011

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

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