SQLite拒绝在C#中使用Microsoft.Data.Sqlite .Net 7设置为WAL

ycl3bljg  于 2023-01-26  发布在  SQLite
关注(0)|答案(1)|浏览(208)

无法以编程方式设置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模式。

r1zhe5dt

r1zhe5dt1#

@Mark Benningfield一针见血,在PRAGMA journal_mode = WAL之后移动了BeginTransactionAsync;命令检查日志模式是否设置正确。
谢谢

相关问题