使用C# WPF无法将数据保存至SQLite数据库的问题求助
排查SQLite数据写入无报错但表为空的问题
针对你遇到的WPF应用中SQLite数据写入无报错、表名错误会触发提示,但数据库表始终为空的问题,可按以下步骤排查:
1. 确认操作的数据库文件是否正确
|DataDirectory|在Visual Studio调试运行时指向项目的bin/Debug或bin/Release目录,你可能误打开了项目根目录下的空数据库文件。
- 在代码中添加实际路径输出,验证程序操作的数据库位置:
string connectionString = (string)Application.Current.Resources["SQLiteConnection"]; string actualDbPath = connectionString.Replace("|DataDirectory|", AppDomain.CurrentDomain.BaseDirectory); Console.WriteLine("程序操作的数据库路径:" + actualDbPath);
- 复制输出的路径,找到对应数据库文件后用DB Browser打开,查看数据是否存在。
2. 验证数据是否真的被插入
添加执行结果输出,确认ExecuteNonQuery()是否成功影响了行:
int rowsAffected = command.ExecuteNonQuery(); Console.WriteLine("插入操作影响行数:" + rowsAffected);
如果输出为0,说明插入逻辑未生效;如果为1,则数据已写入,问题出在你查看的数据库文件不对。
3. 检查数据库文件是否被自动覆盖
如果项目中添加了Sanganak.db文件,且其属性设置为复制到输出目录 = 始终复制,每次运行程序时,项目根目录的空数据库会覆盖bin目录下的数据库,导致之前写入的数据丢失。
- 右键项目中的
Sanganak.db文件 → 属性 → 把“复制到输出目录”改为如果较新则复制或不复制。
4. 补全异常信息排查隐藏错误
当前catch块仅输出Exception.Message,可能遗漏了内部异常细节,修改为:
catch (Exception ex) { Console.WriteLine("错误信息:" + ex.Message); if (ex.InnerException != null) { Console.WriteLine("内部错误:" + ex.InnerException.Message); } }
运行程序后查看完整错误信息,排查潜在问题。
5. 显式使用事务确保提交
虽然SQLite默认自动提交,但显式开启事务可避免隐式事务导致的提交失败:
using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { string sql = "INSERT INTO Disclaimer (DisName, DisDateTime) VALUES (@DisName, @DisDateTime)"; using (SQLiteCommand command = new SQLiteCommand(sql, connection, transaction)) { command.Parameters.AddWithValue("@DisName", systemName); command.Parameters.AddWithValue("@DisDateTime", currentDateAndTime.ToString("yyyy-MM-dd HH:mm:ss")); int rowsAffected = command.ExecuteNonQuery(); Console.WriteLine("影响行数:" + rowsAffected); } transaction.Commit(); } }
内容的提问来源于stack exchange,提问作者Athang Tikekar
相关产品推荐
相关产品推荐

