C# 通过网络连接到SQLite DB

C# 通过网络连接到SQLite DB,c#,sqlite,sqlconnection,C#,Sqlite,Sqlconnection,我目前正在映射一个网络驱动器,并以这种方式连接到文件(Z:\Data\Database.db)。我希望能够在连接字符串中使用相对路径(\server\Data\Database.db),但它给我一个SQLite错误“无法打开数据库文件”。存在一个目录(\\server\Data\Database.db)检查返回true 以下是使用路径“\\server”作为参数打开连接的尝试: public static OpenDB(string dbPath) { using (SQLiteConn

我目前正在映射一个网络驱动器,并以这种方式连接到文件(Z:\Data\Database.db)。我希望能够在连接字符串中使用相对路径(\server\Data\Database.db),但它给我一个SQLite错误“无法打开数据库文件”。存在一个
目录(\\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);
            }
        }
    }
}

这就是我使用的解决方案。这是来自和的建议的结合。首先,我将path
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()
使用布尔值,因此任何需要刷新数据库的操作都可以使用管理共享中的新副本覆盖本地副本。希望这有帮助

驱动器需要共享,并且网络凭据必须允许用户读取文件。文件夹和文件本身已设置为所有用户的完全读/写权限。根文件夹(“数据”)是网络共享驱动器。能否使用windows资源管理器以相同路径打开?这将验证凭据在计算机之间是否有效。如果用户帐户在两台机器上都无效,则文件是否全部读取并不重要。必须有一个组帐户才能允许两台电脑具有相同的凭据。这可能是问题所在。可以通过windows资源管理器访问该文件,但每台计算机都以本地管理员帐户登录。请注意,由于存在潜在的损坏问题,不建议在网络驱动器上托管sqlite数据库。