即使连接已关闭,SQLite也会锁定文件

时间:2010-05-06 08:29:53

标签: c# sqlite

以下声明是否应该自动更新?我在执行查询后尝试删除文件 IOException

using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "data\\test.db;Version=3;"))
{
    connection.Open();
    SQLiteCommand command = new SQLiteCommand("CREATE TABLE IF NOT EXISTS test (id INTEGER)", connection);
    command.ExecuteNonQuery();
}

//throwing an IOException
File.Delete(AppDomain.CurrentDomain.BaseDirectory + "data\\test.db");

5 个答案:

答案 0 :(得分:5)

我迟到了,但我不得不:

GC.WaitForPendingFinalizers();
GC.Collect();

在调用File.Delete()。

之前

答案 1 :(得分:1)

SQLiteCommand也不是Dispose(能够)吗?连接可能无法关闭,因为您尚未关闭命令。我也会使用它。

答案 2 :(得分:0)

我不确定问题是什么 - 我只是阅读了source code到C#客户端和sqlite的C#实现,并没有什么明显的 - 所以也许你只需要等待几秒钟来获取操作系统在完全准备删除之前完成将内容写回磁盘?

当然,如果数据不是那么多,那么你应该只使用内存数据库。如果你不需要,为什么要使用数据来打扰文件系统呢?您需要此连接字符串:

Data Source=file::memory:;Version=3;

答案 3 :(得分:0)

您是否尝试在查询执行后关闭连接?

connection.Close();

答案 4 :(得分:0)

使用完所有的 SQLiteConnection SQLiteCommand SQLiteDataReader 后,必须将其丢弃。只需在“使用”块中创建 SQLiteCommand ,问题就会消失。