2010-01-08 27 views
1

我想在完成使用後重命名我的SQLite數據庫文件,但即使在關閉所有連接後,該文件仍然顯示爲由SQLite打開。使用它後無法重命名SQLite數據庫文件

下面是我在做什麼的例子:

using (DbConnection conn = new SQLiteConnection("Data Source=test.db")) 
{ 
    conn.Open(); 
    DbCommand command = conn.CreateCommand(); 
    command.CommandText = "select id from test"; 
    command.ExecuteScalar(); 
} 
File.Move("test.db", "test.db.test"); 

Move調用拋出IOException。這是我對這個數據庫文件的唯一連接。一旦應用程序結束,我可以手動移動文件而不會出現問題。我嘗試了各種方法,例如在連接字符串中明確設置Pooling=false,在處理連接之前手動調用Close,明確啓動並提交事務,但這似乎沒有任何幫助。有沒有辦法強制SQLite在不退出應用程序的情況下關閉/釋放數據庫文件?

回答

0

我推測你使用的是SQLite.Net?我剛剛嘗試過您的代碼,並且在VS 2005中使用SQLite.Net 1.0.65時沒有問題。

+0

是的,我正在使用該庫和該版本。我正在使用VS2008(儘管仍然與.NET 2.0)。我不知道發生了什麼事?您是否預先創建了數據庫文件以包含「測試」表?我在沒有預先存在的數據庫文件的情況下嘗試了相同的代碼,並簡單地捕獲了ExecuteScalar調用引發的異常,並且沒有任何問題。雖然,數據庫文件是0字節,所以這不是一個成就...... – Dennis 2010-01-08 16:59:36

+0

是的,我使用相同的代碼ExecuteNonQuery的「創建表測試(id整數)」第一次,然後我改變了代碼,並運行它幾次在調試和發佈模式。難道這個文件是在代碼的其他地方或者某個外部工具中使用的嗎? – vit 2010-01-08 17:06:28

+0

我剛剛重載了SQLite.NET,現在工作正常,這很奇怪。感謝您嘗試這個,因爲我可能從來沒有想到過自己。 – Dennis 2010-01-08 17:13:23

0

DBCommandIDisposable。也許你需要撥打Dispose或在using聲明中創建它。