c# - 在 C# 中使用排他锁创建 SQLite 数据库

标签 c# sqlite wal

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

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

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

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

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

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

最佳答案

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

对于 System.Data.SQLite,他们的 API 可以在他们的网站上下载 https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki你会在一个 .chm 文件中得到它(如果你在 Windows 10 上下载后记得取消阻止)

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

关于c# - 在 C# 中使用排他锁创建 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997450/

相关文章:

sql - PostgreSQL 13 - WAL - 最后文件更新日期不变

ios - 没有 WAL 文件的 Core Data .sqlite 备份可以恢复为在 WAL 模式下运行吗?

c# - 用户控件中的 VisualStateManager

c# - 如何在 C# 中更新查询字符串?

c++ - 如何将数组存储在 Sqlite3 的一列中?

java - UnsatisfiedLinkError(未找到 native 方法)

sqlite - sqlite3 WAL/SHM文件未删除

c# - 在 app.config 中使用 ConfigurationSections 时 - 你有智能感知吗?

c# - WPF TreeView 中的 "Link"项

java - 如果数字在数字列表中,如何形成 sqlite 查询来选择一行