即使在处理数据库连接之后,SQLitePCL.SQLiteResult也会在Step()上返回“BUSY”

时间:2017-03-20 11:11:00

标签: c# database sqlite uwp database-connection

我正在开发一个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。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

无法保证这些Dispose调用实际发生(异常或其他流控制语句可能会干扰)。

为确保处置对象,您应使用using

using (var conn = new SQLiteConnection(...))
using (var selectCall = conn.Prepare("..."))
{
    var t = selectCall.Step();
    ...
}

答案 1 :(得分:0)

我下载数据库后立即建立了数据库连接并修复了我的问题。出现问题的原因是我为每个数据库操作创建了一个新连接,这导致了一个锁定的数据库。处置该连接仍然无法解决此问题,即使将连接对象设置为null也会有所帮助。因此使用单个数据库连接对象解决了问题,这应该是一般的做法。希望这个答案有所帮助