SQLite:无法以编程方式打开网络文件,即使以前工作过

Sar*_*ger 17 sqlite runtime-error visual-studio-2012

我已经使用下面的代码打开一个SQLite数据库文件,该文件几乎每天都在网络计算机上运行一年多.突然今天早上,我无法以编程方式打开文件.

private Boolean Connect(String strPathFile)
{
    // Initialize the connection object.
    this.DbConnection = null;

    try
    {
        // DATABASE: Create the connection string and set the settings.
        String strConnection = @"Data Source=" + strPathFile + @";Version=3;";

        // DATABASE: Connect to the database.
        this.DbConnection = new SQLiteConnection(strConnection);
        this.DbConnection.Open();

        return true;
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

该文件是"\ Server\ShareName\FileName.db"形式的网络资源(少于双引号).

这是有趣的事情.SQLite管理员无需重复打开网络数据库文件,没有问题.我也可以在本地打开文件.我将文件复制到本地驱动器,只是更改了Visual Studio 2012(VS2012)中的路径.

服务器似乎很好.自从我最后一次检查它以来,它已经在某个时刻重新启动了.我推测Microsoft Update.文件资源管理器浏览文件夹没有问题,正如我所说,SQLite管理员可以打开网络文件.

我再次检查了权限,每个人都有完全控制权,服务器的用户也可以完全控制安全权限和共享权限.我检查了文件夹和文件,权限是一样的.我同样期待,因为SQLite管理员可以打开该文件.服务器没有设置防火墙,Windows防火墙或其他.我今天早上也重新检查了一下.同样,SQLite管理员会抱怨这一点.

我通过使用文件资源管理器在网络驱动器上制作文件的副本来验证写入.这没有问题.

服务器是Windows Server 2003.我使用的是Windows 7 Professional 64位.

我也试图以只读模式打开数据库,但也失败了.我期待那种行为.SQLite Administrator仍然可以很好地工作.

我尝试了各种其他连接字符串,包括SQLiteConnectionStringBuilder()只是为了看看会发生什么,所有的道路都通向罗马,即:

System.Data.SQLite.SQLiteException occurred
  HResult=-2147467259
  Message=unable to open database file
  Source=System.Data.SQLite
  ErrorCode=14
  StackTrace:
       at System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteConnectionFlags connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool)
       at System.Data.SQLite.SQLiteConnection.Open()
       at SQL.cSQL.Connect(String strPathFile) in C:\<Path to source file>:line 367
  InnerException: 
Run Code Online (Sandbox Code Playgroud)

思考?

小智 49

在版本> 1.0.82.0

  1. 将文件名中的前两个反斜杠加倍(例如"\\\\network\share\file.db").

  2. 使用映射的驱动器号.

  3. 使用带有parseViaFramework布尔参数的SQLiteConnection构造函数,并为该参数传递"true".

请在此处查看SQL帖子

  • 谢谢,它有效!因此,使用 C# 中的转义符号,您需要编写 8 个反斜杠:\\\\\\\\network\\share\\file.db (3认同)