我已经使用下面的代码打开了一个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 Administrator在打开网络数据库文件时没有问题,没有,并且重复打开。我也可以在本地打开文件。我将文件复制到本地驱动器,并简单地更改了Visual Studio 2012(VS2012)中的路径。
服务器看起来很好。自从我上次检查它以来,它已经经历了一次重启。我想是微软的更新。文件资源管理器在浏览文件夹时没有问题,正如我所说,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:
有什么想法?
5条答案
按热度按时间zz2j4svz1#
在版本> 1.0.82.0
1.将文件名中的前两个反斜杠加倍(例如
"\\\\network\share\file.db"
)。1.使用Map的驱动器号。
1.使用SQLiteConnection构造函数,该构造函数接受parseViaFramework布尔值参数,并为该参数传递'true'。
查看SQL post here
lymnna712#
假设db文件是可访问的(例如“因为SQLite管理员可以打开文件”),那么来自ranmoro和GEEF的答案中的选项#2似乎可以工作。这变成:
基本原理在https://system.data.sqlite.org/index.html/info/bbdda6eae2中的SQLite签入评论“mistachkin added on 2013-05-25 21:06:45”中进行了讨论
我的连接字符串的格式为:
对于UNC路径,或
对于本地路径。
我正在使用:
dy2hfwbg3#
我也遇到过类似的问题。用Map的驱动器路径(S:\folder\file.db)替换UNC(\server\share\folder\file.db)解决了我的示例中的问题。
gg58donl4#
错误信息非常具有误导性+令人恼火。在本地环境中工作正常的应用程序在客户端服务器情况下无法启动。
它主要与代码有关。这与服务器端有关。
Write
访问权限可用于包含该文件的服务器文件夹。连接字符串:
更新:
我尝试将
\\
前置到UNC路径,并且成功了(仅在开始时添加额外的\\
,而不是在中间)。2o7dmzc55#
对我来说,工作的解决方案是从反斜杠改为正斜杠。
代码环境是PowerShell。
Powershell示例:
我花了很多时间,尝试了以上所有的解决方案,但只有这个对我有效。
来源:This Comment