Подключение к БД SQLite по сети - PullRequest
0 голосов
/ 31 августа 2018

В настоящее время я подключаю сетевой диск и подключаюсь к файлу (Z: \ Data \ Database.db). Я хотел бы иметь возможность просто использовать относительный путь (\ server \ Data \ Database.db) в строке подключения, но он дает мне ошибку SQLite "невозможно открыть файл базы данных". Directory.Exists(\\server\Data\Database.db); проверка возвращает истину.

Вот попытка открыть соединение, используя путь "\\ server" в качестве аргумента:

public static OpenDB(string dbPath)
{
    using (SQLiteConnection conn = new SQLiteConnection($"Data Source={Path.Combine(dbPath, "Data\\Database.db")}"))
    {
        if (dbPath != null && dbPath != "")
        {
            try
            {
                conn.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Unable to Open Database", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

1 Ответ

0 голосов
/ 18 сентября 2018

Это было решение, которое я использовал. Это комбинация советов от jdweng и Shawn . Сначала я сделал путь dbPath административным общим ресурсом. Оттуда я заставил программу сделать временную локальную копию базы данных с административного ресурса:

private static void MakeTempDatabaseCopy(string dbPath, string exePath)
{
    try
    {
        File.Copy(Path.Combine(dbPath, "Data", "Database.db"), Path.Combine(exePath, "Temp", "Database.db"), true);
        FileInfo directoryInfo = new FileInfo(Path.Combine(exePath, "Temp", "Database.db"));
        directoryInfo.Attributes = FileAttributes.Temporary;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error Retrieving Database", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

После этого все методы могут читать из локальной копии. Поскольку File.Copy() использует логическое значение, все, что требует обновления базы данных, может просто перезаписать локальную копию новой копией из административного общего ресурса. Надеюсь, это поможет!

...