我有一个SQLite数据库,我希望锁定该数据库以便进行同步。我不希望进程在不同的机器上异步运行,处理从不同的机器添加的数据,直到它完成更新。DataAccess是一个连接到sPackageFileName的类,只要sPackageFileName是相同的或者除非调用.Close方法,它就会重用相同的连接。所以基本上DataAccess.ExecCommand会执行一条命令。我在谷歌里找到了这个……
DataAccess.ExecCommand("PRAGMA locking_mode = EXCLUSIVE", sPackageFileName)
DataAccess.ExecCommand("BEGIN EXCLUSIVE", sPackageFileName)
DataAccess.ExecCommand("COMMIT", sPackageFileName)这就像广告一样。如果我在A框上运行它,然后在B框上运行它,我会得到一个“数据库锁定”异常。问题是需要多长时间。我找到了一辆PRAGMA busy_timeout。超时控制访问锁,而不是数据库锁。我在想,数据库锁定超时没有PRAGMA。现在看起来大概需要3-4分钟。另请注意,sPackageFileName不在这两个盒子上,它们(盒子A和盒子B)通过共享驱动器连接到它。另外,我还对SQLite dll使用了VB.NET包装器。
发布于 2014-09-09 02:26:40
我找到了正确的线索。这是.NET命令的超时。下面是我的类中设置它的代码。
Dim con As DbConnection = OpenDb(DatabaseName, StoreNumber, ShareExclusive, ExtType)
Dim cmd As DbCommand = con.CreateCommand()
If _QueryTimeOut > -1 Then cmd.CommandTimeout = _QueryTimeOut不要在变量上挂断,发布代码的目的是展示我可以显示我正在讨论的属性。默认_QueryTimeOut设置为300 (秒)。我将cmd.ComandTimeout设置为1(秒),它按预期返回。
当CL终于打通我的电话时,超时发生在别的地方。有时需要踢一脚才能把你从盒子里拉出来。:-)
https://stackoverflow.com/questions/25694571
复制相似问题