Подтвердить что ты не робот

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

Я загружаю данные из базы данных 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, и я хочу использовать относительный путь в строке соединения. Любой совет? Спасибо.

4b9b3361

Ответ 1

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

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);

Ответ 2

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

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

Спасибо

ck.Nitin(TinTin)

Ответ 3

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

System.Environment.CurrentDirectory 

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

Ответ 4

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

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

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

"~/../other" и "| DataDirectory \/../other" не удастся

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

Ответ 5

   <?xml version="1.0"?>  
<configuration>  
  <appSettings>  
    <!--FailIfMissing=false -->  
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>  
  </appSettings>  
</configuration>  

Ответ 6

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

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

Ответ 7

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

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") - ответ.

Ответ 8

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

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

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

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

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

Ответ 9

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

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

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

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

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

Ответ 10

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

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