在 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
)。
如何关闭 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
)。