2010-05-06 43 views
3

不應該將以下語句設爲autocommited?我得到一個IOException試圖在執行查詢後刪除文件。儘管連接已關閉,SQLite鎖定文件

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"); 
+0

什麼是實際例外? – 2010-05-06 09:15:37

+0

例外情況是:「進程無法訪問文件'data \ test.db',因爲它正在被另一個進程使用。」 – 2010-05-06 09:41:12

+0

我也得到這個錯誤,是有史以來發現的解決方案?即使在等待幾秒或幾分鐘後,文件仍未解鎖,也可以使用 – Mizipzor 2010-11-18 12:52:29

回答

3

,我遲到了,但我不得不:

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

之前要調用File.Delete()。

0

我不知道是什麼問題 - 我剛剛看了source code到C#的客戶端和SQLite的C#實現,並沒有什麼明顯的 - 所以也許你只需要等待幾秒鐘的OS在完全準備好刪除之前將事情寫回磁盤?

當然,如果它沒有那麼多的數據,那麼你應該只使用內存數據庫。如果你不需要,爲什麼要用數據打擾文件系統?您需要此連接字符串:

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

。該列表僅僅是實際代碼的簡化。但是謝謝你的提示。 – 2010-05-06 09:42:42

+0

好吧,它打敗了「夥計,這應該工作」,這是我首先要寫的東西。 :-) – 2010-05-06 10:03:14

0

您是否試圖在查詢執行後關閉連接?

connection.Close();

1

是不是SQLiteCommand還處置(能)?連接可能沒有關閉,因爲您尚未關閉該命令。我也會使用它。

+0

我也有這個問題。我處理了我使用的sql命令並釋放了該文件。 – Behr 2013-08-01 20:02:26