所以我這是爲了檢查是否有表中被定義爲數據庫中存在的方法如下:檢查是否表存在保持連接打開SQLite中
internal override bool TableExists(string tableName)
{
bool tableExists = false;
// Check the Tables schema and see if the table exists
using (SQLiteConnection conn = (SQLiteConnection) CreateConnection())
{
conn.Open();
DataRow[] rows = conn.GetSchema("Tables").Select(string.Format("Table_Name = '{0}'", tableName));
tableExists = (rows.Length > 0);
}
// Actually called elsewhere in the code, just here for testing.
File.Delete(DatabaseEnvironmentInfo.GetPrimaryDataFile(DatabaseName));
return tableExists;
}
CreateConnection()
只是創建一個新的連接連接字符串,所以我不認爲這個問題在那裏。如果我有刪除線conn.GetSchema("Tables")...
,我能夠刪除數據庫文件,但如果我再補充一點線早在我出現以下情況例外,當我嘗試using
後刪除:
System.IO.IOException: 不能訪問該文件的進程「C:\ db.sqlite」 ,因爲它正由另一個 過程..
做DataRow
對象存到數據庫的連接,或有沒有人知道是什麼的問題可能是?如果有更好的方法來檢查一個表是否存在於SQLite中,我也對它開放。
謝謝!
我已經試過,並沒有幫助。另外,我非常肯定,當我們退出範圍時,using語句將明確地關閉連接。 – 2011-05-13 15:27:36
using語句確保在塊結束時將調用dispose並將對象註冊爲垃圾回收。我雖然也許這個配置還沒有被調用,當你試圖刪除文件 – Martin 2011-05-13 15:30:43
是的,我想這是可能的。但在真實的代碼中,我嘗試在代碼中進一步刪除數據庫。這正是我縮小到的地方。 – 2011-05-13 15:32:59