我正在开发一个UWP应用程序并尝试在按钮单击事件的数据库表中插入行。以下是相同的查询:
SQLiteConnection dbConnection = new SQLiteConnection
(Path.Combine(ApplicationData.Current.LocalFolder.Path + "\\" + fileName + "\\" + fileName + ".db"));
var selectDB = @"*sample insert statement*";
ISQLiteStatement selectCall = dbConnection.Prepare(selectDB);
var t = selectCall.Step();
dbConnection.Dispose();
dbConnection = null;
selectCall.Dispose();
selectCall = null;
第一次成功执行插入查询(var t =“DONE”)。我面临的问题是,在第一次执行后,由于某种原因数据库被锁定(var t =“BUSY”)。调用Dispose()函数后,同样的问题仍然存在。我在这里错过了什么吗?有没有更好的方法呢?这是我第一次使用SQLite。谢谢你的帮助。
答案 0 :(得分:1)
无法保证这些Dispose
调用实际发生(异常或其他流控制语句可能会干扰)。
为确保处置对象,您应使用using
:
using (var conn = new SQLiteConnection(...))
using (var selectCall = conn.Prepare("..."))
{
var t = selectCall.Step();
...
}
答案 1 :(得分:0)
我下载数据库后立即建立了数据库连接并修复了我的问题。出现问题的原因是我为每个数据库操作创建了一个新连接,这导致了一个锁定的数据库。处置该连接仍然无法解决此问题,即使将连接对象设置为null也会有所帮助。因此使用单个数据库连接对象解决了问题,这应该是一般的做法。希望这个答案有所帮助