在 SQLite-WinRT 包装器中关闭连接

Close connection in SQLite-WinRT wrapper

如何关闭 SQLite-WinRT wrapper 中的所有数据库连接。我需要删除 sqlite 数据库,但它在删除时抛出异常 Access is denied,因为某些连接已经在使用数据库。所以我需要在删除之前关闭所有连接。

我试过像这样处理数据库:

var dbFile = await StorageFile.GetFileFromPathAsync(dbPath);
db = new SQLiteWinRT.Database(dbFile); 
db.Dispose();

但是它不起作用并抛出相同的异常。

谢谢!

using {...} 块内执行面向数据库的操作。

The using statement obtains one or more resources, executes a statement, and then disposes of the resource.

示例:

using (var db = new SQLiteConnection(DbPath))
{
    db.Trace = true;
    db.Execute("DELETE FROM Person WHERE Id = ?", person.Id);
}

有时 SQLite 无法正确处理。要解决此问题,您可以在垃圾收集器上调用 Collect

例子

var dbFile = await StorageFile.GetFileFromPathAsync(dbPath);
db = new SQLiteWinRT.Database(dbFile); 
db.Dispose();

// Then force GC
GC.Collect();

如果这对您不起作用,请参阅此 SO question 以获取一些替代解决方案。

我遇到了同样的问题。就我而言,我没有正确处理准备好的陈述。每次调用 PrepareStatementAsync 时,都必须对结果语句调用 Dispose(或使用 using)。