С System.Data.SQLite, как вы определяете файл базы данных в строке подключения, используя относительный путь

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

Ответ 1

Предложение

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

Итак, если вы знаете, что файл базы данных находится в подпапке database папки приложения, вы можете сделать что-то вроде этого (С#):

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

(Возможно, кто-то может исправить меня, как получить текущий путь).

Ответ 2

Как насчет этого?

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

Ответ 3

Вот так:

String currentPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);