C#使用Microsoft.Data.SQLite执行Insert命令未实际写入数据库问题
故障排查与解决方向
- 检查外层事务提交逻辑
如果当前插入方法被包裹在*未显式提交的SqliteTransaction*作用域中,连接关闭时会自动回滚所有未提交的变更,即使ExecuteNonQuery返回受影响行数为1,数据也不会持久化写入磁盘。可检查是否存在异常分支跳过了Commit()方法调用,测试项目无外层事务逻辑因此执行正常。 - 确认实际操作的数据库路径
打印当前运行环境下的连接字符串完整值,验证DataSource对应的磁盘路径是否与你用数据库浏览器查看的文件路径完全一致。不同项目类型的相对路径解析规则存在差异,比如类库、单元测试项目、打包后的运行环境会将相对路径解析到和裸WPF测试项目不同的位置,可能实际写入了另一目录下的同名数据库文件。 - 排查目标表的触发器配置
查看Mediatypes表是否存在*AFTER INSERT类型的触发器*,如果触发器逻辑中包含删除新插入行的规则,会导致插入成功后数据被自动清理,其他无触发器的表写入不受影响。 - 手动触发WAL检查点验证
在关闭数据库连接前执行PRAGMA wal_checkpoint(TRUNCATE);命令,强制将WAL日志中的变更写入主数据库文件,再查看数据是否存在,排除WAL日志未同步到主库的问题。
内容的提问来源于stack exchange,提问作者Wciibb
相关产品推荐
相关产品推荐

