20

我几乎每天都使用下面的代码打开一个位于网络计算机上一年多的 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) 中的路径。

服务器看起来不错。自从我上次检查它以来,它在某个时候经历了重新启动。我认为是 Microsoft 更新。文件资源管理器浏览文件夹没有问题,正如我所说,SQLite 管理员可以打开网络文件。

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

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

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

我也尝试以只读模式打开数据库,但也失败了。我期待这种行为。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: 

想法?

4

4 回答 4

62

在版本 > 1.0.82.0

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

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

  3. 使用接受 parseViaFramework 布尔参数的 SQLiteConnection 构造函数并为该参数传递“true”。

请参阅此处的 SQL 帖子

于 2013-08-29T08:42:09.320 回答
1

我有一个类似的问题。用映射的驱动器路径 (S:\folder\file.db) 替换 UNC (\server\share\folder\file.db) 可以解决我的实例中的问题。

于 2014-05-27T05:41:38.010 回答
0

该错误消息非常具有误导性+令人讨厌。在本地环境中运行良好的应用程序在客户端服务器情况下无法启动。

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

  • 确保Write包含该文件的服务器文件夹可以访问。

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

  • 一些站点+用户说要在连接字符串中提及版本号。我所有的应用程序都可以在不使用它的情况下正常工作。

连接字符串:

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

更新:

我尝试添加\\ 到 UNC 路径并且它起作用了(\\仅在开头添加,而不是在中间添加)。

Data Source=\\[UNC]\[SubFolders]\[FileName].db;
于 2015-02-22T18:51:02.210 回答
0

假设 db 文件是可访问的(例如“因为 SQLite 管理员可以打开文件”),那么 ranmoro 和 GEEF 的答案中的选项 #2 似乎有效。这变成:

bool parseViaFramework = true;
con = new SQLiteConnection( cs, parseViaFramework );

在代码中。基本原理在https://system.data.sqlite.org/index.html/info/bbdda6eae2中的 SQLite 签入评论“mistachkin added on 2013-05-25 21:06:45”中讨论

我的连接字符串的形式是:

URI=file:\\SERVER\Data\SqlData\History.db

对于 UNC 路径,或

URI=file:C:\Data\SqlData\History.db

对于本地路径。

我在用:

Visual Studio 2022
<TargetFramework>net5.0-windows</TargetFramework>
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.115.5" />
于 2022-02-27T09:31:15.270 回答