Строка подключения с относительным путем к файлу базы данных
Я загружаю данные из базы данных 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, и я хочу использовать относительный путь в строке соединения.
Любой совет? Спасибо.
Ответы
Ответ 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="Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;"" 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, в общем.