C# SQLite锁定文件,即使连接已关闭
下面的语句不应该自动提交吗?我在执行查询后尝试删除该文件时遇到一个IOExceptionC# SQLite锁定文件,即使连接已关闭,c#,sqlite,C#,Sqlite,下面的语句不应该自动提交吗?我在执行查询后尝试删除该文件时遇到一个IOException using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "data\\test.db;Version=3;")) { connection.Open(); SQLiteCommand command = new SQLi
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");
我不确定问题出在哪里——我只是读了到sqlite的C#client和C#implementation的代码,没有什么明显的东西——所以也许你只需要等待几秒钟,让操作系统完成写回磁盘的操作,然后就可以删除了 当然,如果没有那么多数据,那么您应该只使用内存中的数据库。如果不需要,为什么还要用数据来打扰文件系统呢?您需要此连接字符串:
Data Source=file::memory:;Version=3;
执行查询后是否尝试关闭连接
connection.Close()代码>SQLITE命令不是也可以处置(Dispose)吗?连接可能无法关闭,因为您尚未关闭该命令。我也会使用using。我参加聚会迟到了,但我不得不:
GC.WaitForPendingFinalizers();
GC.Collect();
在调用File.Delete()。之前,您必须在使用完每个SQLiteConnection、SQLiteCommand和SQLiteDataReader后,将其处理掉。只需在“使用”块中创建SQLiteCommand,问题就会消失。实际的异常是什么?异常是:“进程无法访问文件'data\test.db',因为它正被另一个进程使用。”我也收到了这个错误,找到解决方案了吗?即使等待几秒钟或几分钟,文件也不会解锁。清单只是对实际代码的简化。但谢谢你的提示。好吧,这比“老兄,这应该行得通”要好得多,这是我首先要写的我也有这个问题。我处理了我使用的sql命令,它发布了该文件。