2017-03-20 95 views
0

我正在开发一个UWP应用程序,并试图在数据库表中插入行按钮单击事件。以下是查询相同:即使在处理数据库连接之后,SQLitePCL.SQLiteResult也会在Step()返回“BUSY”

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。感谢您的帮助。

回答

1

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

为了确保物品设置,你应该使用using

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

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

相关问题