无法以编程方式设置SQLite的WAL模式。创建数据库文件时调用了代码
var conn = new SqliteConnection(_connectionString);
await using(conn.ConfigureAwait(false))
{
await conn.OpenAsync().ConfigureAwait(false);
var trans = await conn.BeginTransactionAsync().ConfigureAwait(false);
await using(trans.ConfigureAwait(false))
{
var command = conn.CreateCommand();
await using(command.ConfigureAwait(false))
{
command.CommandType = CommandType.Text;
command.CommandText = $"PRAGMA journal_mode = WAL;";
await command.ExecuteNonQueryAsync().ConfigureAwait(false);
}
var command2 = conn.CreateCommand();
await using(command2.ConfigureAwait(false))
{
command2.CommandType = CommandType.Text;
command2.CommandText = $"PRAGMA wal_autocheckpoint=1000;";
await command2.ExecuteNonQueryAsync().ConfigureAwait(false);
}
trans.Commit();
}
//Set Settings
}
当我再次打开数据库时,journal_mode是DELETE。但是wal_autoccheckpoint被正确地设置为1000。使用SQLite的DB浏览器并运行相同的命令可以工作。我尝试了我能想到的任何方法。我甚至将两个PRAGMA拆分为单独的命令。最初它们被打包为一个$"PRAGMA journal_mode = WAL;{Environment.NewLine}PRAGMA wal_autocheckpoint=1000;"
有什么想法吗?
我希望在运行代码并打开SQLite数据库后,数据库处于WAL模式。
1条答案
按热度按时间r1zhe5dt1#
@Mark Benningfield一针见血,在PRAGMA journal_mode = WAL之后移动了BeginTransactionAsync;命令检查日志模式是否设置正确。
谢谢