Желая развернуть мой проект на разных серверах, я бы предпочел указать строку подключения, используя относительный путь. Кажется, я не могу заставить это работать и хочу знать, есть ли в этом какой-то трюк ...?





Вы можете создать абсолютный путь в приложении и передать его в строке подключения.
Итак, если вы знаете, что файл базы данных находится в подпапке database папки приложения, вы можете сделать что-то вроде этого (C#):
string relativePath = @"database\myfile.s3db";
string currentPath;
string absolutePath;
string connectionString;
currentPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
absolutePath = System.IO.Path.Combine(currentPath,relativePath);
connectionString = string.Format("DataSource = {0}", absolutePath);
SQLiteConnection cnn = new SQLiteConnection(connectionString);
(Кто-то, наверное, поправит меня, как получить текущий путь).
Нравится:
Строка currentPath = System.IO.Path.GetDirectoryName (Application.ExecutablePath);
Как насчет этого?
"Data Source=|DataDirectory|mydb.db;..."
Я считаю, что |DataDirectory| указывает на каталог, в котором находится ваше приложение. Я использую NHibernate, и он работает со следующим:
<add key = "hibernate.connection.connection_string"
value = "Data Source=|DataDirectory|mydb.db;Version=3;Compress=False;synchronous=OFF;" >
Это был бы правильный метод, за исключением того, что он не поддерживает время разработки, так как ваша программа будет работать в режимах отладки и в режимах выпуска, но при попытке изменить определения набора данных она вылетает с сообщением «невозможно подключиться к БД». это известная ошибка в SQLITe.
Юк, не используйте пространство имен отражения, чтобы получить базовый путь. использование:
AppDomain.CurrentDomain.BaseDirectory