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

SQLite:无法以编程方式打开网络文件,即使以前工作过,sqlite,visual-studio-2012,runtime-error,Sqlite,Visual Studio 2012,Runtime Error,我已经使用下面的代码打开了一个SQLite数据库文件,该文件位于网络计算机上已有一年多了,现在几乎每天都有。今天早上,我突然无法以编程方式打开该文件 private Boolean Connect(String strPathFile) { // Initialize the connection object. this.DbConnection = null; try { // DATABASE: Create the connection

我已经使用下面的代码打开了一个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;
}
该文件是一个网络资源,格式为“\Server\ShareName\FileName.db”(减去双引号)

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

服务器似乎很好。自从我上次检查它以来,它在某个时候重新启动过。我想是微软的更新。文件浏览器在浏览文件夹时没有问题,正如我所说,SQLite管理员可以打开网络文件

我再次检查了权限,每个人都有完全控制权,服务器的用户也有完全控制权,包括安全权限和共享权限。我检查了文件夹和文件,权限相同。我也期望如此,因为SQLite管理员可以打开该文件。服务器未设置防火墙、Windows防火墙或其他。我今天早上也重新检查过了。同样,SQLite管理员也会对此抱怨

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

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

我还尝试以只读模式打开数据库,但也失败了。我期待着这种行为。SQLite管理员仍然可以很好地工作

我尝试了其他各种连接字符串,包括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: 
发生System.Data.SQLite.SQLite异常 HResult=-2147467259 消息=无法打开数据库文件 Source=System.Data.SQLite 错误代码=14 堆栈跟踪: 在System.Data.SQLite.SQLite3.Open(字符串strFilename、SQLiteConnectionFlags connectionFlags、SQLiteOpenFlagsEnum openFlags、Int32 maxPoolSize、Boolean usePool) 在System.Data.SQLite.SQLiteConnection.Open()处 在C:\:第367行中的SQL.cSQL.Connect(字符串strPathFile)处 内部异常: 想法?

在版本>1.0.82.0中

  • 将文件名中前导的两个反斜杠加倍 (例如,
    “\\\\network\share\file.db”

  • 使用映射的驱动器号

  • 使用接受ParseVia框架的SQLiteConnection构造函数 布尔参数,并为该参数传递“true”


  • 请参阅SQL post,我也遇到了类似的问题。将UNC(\server\share\folder\file.db)替换为映射的驱动器路径(S:\folder\file.db)可以解决我的实例中的问题。

    错误消息非常容易引起误解和恼人。在本地环境中正常工作的应用程序在客户端-服务器情况下无法启动

    它主要与代码无关。它与服务器端相关

    • 确保包含该文件的服务器文件夹具有写入权限

    • UNC[基于IP的服务器路径]仍不受支持,应映射网络路径/文件夹以解决此问题

    • 一些站点+用户表示要在连接字符串中提及版本号。我所有的应用程序在不使用它的情况下运行良好

    连接字符串:

    Data Source=[Mapped Server Location]\[SubFolders]\[FileName].db;
    
    更新:

    我尝试将
    \\
    预先添加到UNC路径,结果成功了(仅在开始时添加了额外的
    \\
    ,而不是在中间添加)


    从.net3.5升级到.net4后,我也发生了同样的事情。尚未找到解决方案:(我忘记了这个问题。我做了一些事情,遗憾的是不记得当时发生了什么,问题就消失了。我没有以编程方式解决问题。解决方法是我在服务器上做的。您可能想尝试重新启动服务器。问题与文件锁定等有关。谢谢或者是我的想法,但是我将无法尝试回答,直到我回到我的工作。我被解雇了,希望只是暂时的。问题发生在我的机器上,但在其他机器上工作,所以我不认为将后斜线加倍会行得通。我非常确定我确实使用了\\\\network。@ranmoro为什么是2。重要吗?我有一个这样的问题当我尝试在没有它的情况下访问数据库时(您的观点1),我会得到“无法打开数据库文件”,但当我尝试使用驱动器号打开同一个数据库时(驱动器一直处于映射状态,因此没有任何更改)它工作得很好。谢谢,它工作得很好!因此使用c中的转义符号,您需要写8个反斜杠:\网络\\共享\\文件。db@gajo357原始(链接)文本说:“这个问题有几个解决方法:”,第2点只是3种解决方法中的一种。@rammoro:4个反斜杠对我来说很好。我发现,SQLite的DB Browser用斜杠(而不是反斜杠)显示路径。所以我简单地用斜杠(/)替换了反斜杠(),效果很好。
    Data Source=\\[UNC]\[SubFolders]\[FileName].db;