通过网络连接到 SQLite 数据库
Connecting to SQLite DB over network
我目前正在映射网络驱动器并以此方式连接到文件 (Z:\Data\Database.db)。我希望能够在连接字符串中使用相对路径 (\server\Data\Database.db),但它给我一个 SQLite 错误 "unable to open database file"。 Directory.Exists(\server\Data\Database.db);
检查返回 true。
这里尝试使用路径“\\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);
}
}
}
}
这是我使用的解决方案。它是来自 jdweng and 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()
使用布尔值,任何需要刷新数据库的东西都可以用来自管理共享的新副本覆盖本地副本。希望这对您有所帮助!
我目前正在映射网络驱动器并以此方式连接到文件 (Z:\Data\Database.db)。我希望能够在连接字符串中使用相对路径 (\server\Data\Database.db),但它给我一个 SQLite 错误 "unable to open database file"。 Directory.Exists(\server\Data\Database.db);
检查返回 true。
这里尝试使用路径“\\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);
}
}
}
}
这是我使用的解决方案。它是来自 jdweng and 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()
使用布尔值,任何需要刷新数据库的东西都可以用来自管理共享的新副本覆盖本地副本。希望这对您有所帮助!