如何关闭SQLite-WinRT wrapper中的所有数据库连接。我需要删除sqlite数据库,但在删除时抛出异常Access is denied
,因为某些连接已经在使用数据库。所以我需要在删除之前关闭所有连接。
我尝试过处理数据库,如:
var dbFile = await StorageFile.GetFileFromPathAsync(dbPath);
db = new SQLiteWinRT.Database(dbFile);
db.Dispose();
但它不起作用并抛出相同的异常。
谢谢!
答案 0 :(得分:1)
在using {...}
块内执行面向数据库的操作。
using语句获取一个或多个资源,执行语句,然后处置资源。
示例:
using (var db = new SQLiteConnection(DbPath))
{
db.Trace = true;
db.Execute("DELETE FROM Person WHERE Id = ?", person.Id);
}
答案 1 :(得分:1)
有时SQLite无法正确处置。要解决此问题,您可以在垃圾收集器上调用Collect
。
示例强>
var dbFile = await StorageFile.GetFileFromPathAsync(dbPath);
db = new SQLiteWinRT.Database(dbFile);
db.Dispose();
// Then force GC
GC.Collect();
如果这对您不起作用,请参阅此SO question以获取其他替代解决方案。
答案 2 :(得分:1)
我遇到了同样的问题。就我而言,我没有正确处理准备好的陈述。每次致电PrepareStatementAsync
时,您都必须在结果声明中致电Dispose
(或使用using
)。