Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite锁定文件,即使连接已关闭_C#_Sqlite - Fatal编程技术网

C# SQLite锁定文件,即使连接已关闭

C# 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

下面的语句不应该自动提交吗?我在执行查询后尝试删除该文件时遇到一个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");

我不确定问题出在哪里——我只是读了到sqlite的C#client和C#implementation的代码,没有什么明显的东西——所以也许你只需要等待几秒钟,让操作系统完成写回磁盘的操作,然后就可以删除了

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

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

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


connection.Close()

SQLITE命令不是也可以处置(Dispose)吗?连接可能无法关闭,因为您尚未关闭该命令。我也会使用using。我参加聚会迟到了,但我不得不:

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

在调用File.Delete()。

之前,您必须在使用完每个SQLiteConnectionSQLiteCommandSQLiteDataReader后,将其处理掉。只需在“使用”块中创建SQLiteCommand,问题就会消失。

实际的异常是什么?异常是:“进程无法访问文件'data\test.db',因为它正被另一个进程使用。”我也收到了这个错误,找到解决方案了吗?即使等待几秒钟或几分钟,文件也不会解锁。清单只是对实际代码的简化。但谢谢你的提示。好吧,这比“老兄,这应该行得通”要好得多,这是我首先要写的我也有这个问题。我处理了我使用的sql命令,它发布了该文件。