使用C#中的Exclusive锁创建SQLite数据库

时间:2013-11-15 09:17:27

标签: c# sqlite wal

我正在尝试创建一个日志模式设置为WAL的数据库,并通过将锁定模式设置为EXCLUSIVE来禁用共享内存,但我似乎无法使其正常工作。

我的连接字符串如下所示:

_connectionString = string.Format("Data Source={0};Synchronous=Off;Journal Mode=WAL; PRAGMA locking_mode=EXCLUSIVE", _databasePath);

当我启动应用程序并创建数据库时,我仍然得到一个shm文件,当使用EXCLUSIVE作为锁定模式时,我不会发生这种情况。我也可以在多个应用程序中打开数据库,因此似乎没有设置独占锁。

如果有人能对这种情况有所了解,我将不胜感激。

编辑说我正在使用使用SQLite v-3.7.7.1的System.Data.SQLite v-1.0.74.0,因此应该实现在WAL模式下禁用共享内存。

1 个答案:

答案 0 :(得分:1)

SQLiteConnection构造函数不支持设置锁定模式。尽管看起来它支持任何通用Pragma语句,但它们实际上都有一个可以发送的受支持参数表。它们确实支持许多Pragma语句,但是Locking Mode并不是其中之一。

对于System.Data.SQLite,可以在其网站https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki上下载其API,您将以.chm文件的形式获取它(下载后,如果您使用的是Windows 10,请记住取消阻止)

相反,我建议在创建并打开SQLiteConnection对象的连接后,将Pragma语句作为单独的查询执行。