首先是一些基本信息後:可能腐敗SQLite表怪「沒有這樣的表」錯誤
- 我在「程序文件」的SQLite數據庫在我的根文件夾C:驅動器在Win10 64 。
- 我從3個程序同時訪問數據庫。
問題:
我使用DB Browser for SQLite創建一個新的表table2
。然後,我嘗試在VS2013中使用調試模式下的簡單應用插入一行。該代碼非常簡單:
using (SQLiteConnection database = new SQLiteConnection("Data Source=C:/Program Files/myapp/testdb.db;Version=3;"))
{
database.Open();
using (SQLiteCommand cmd = database.CreateCommand())
{
cmd.CommandText = "INSERT INTO trades VALUES (@id, @pass);";
cmd.Prepare();
cmd.Parameters.AddWithValue("@id", 36365);
cmd.Parameters.AddWithValue("@pass", "verysecurepassword123");
cmd.ExecuteNonQuery();
}
}
上運行,它給了我一個SQL logic error or missing database
錯誤與消息no such table
。我嘗試了多次,但得到了相同的結果。所有這些時間,DB Browser都告訴我表格存在,即使在我嘗試重新啓動它之後;這意味着表格確實存在。 [值得注意的一點可能是VS是在非管理員模式,這將是一個問題,因爲它需要管理員權限寫入到數據庫運行的運行。]
然後我試圖改變的CommandText到SELECT COUNT(*) FROM sqlite_master;
和執行標量。結果是1
,這意味着它無法看到新表格。
編輯:我幾乎可以完全肯定,這是某種形式的緩存問題,因爲我想在數據庫(不同路徑)的副本再次列出表格,並正確讀出2個表。
然後我嘗試重新啓動VS,之後錯誤及時更改爲cannot write to readonly table
。我試着重新啓動,這次用管理員權限,它識別表並插入很好。
我的問題:
- 是什麼原因造成的第一個例外給一個錯誤的原因是什麼?
- 它是如何神奇地修復重新啓動VS?
- 運行在相同數據庫上的第三個應用程序位於VS的單獨管理實例上,但調試器已分離。這個應用程序是一個小規模的服務器,我總是從VS運行它,所以我可以很容易地進行調試。它使用第一個表格(不是新的表格)。是否有可能導致上面的(緩存?)問題也可能導致這個應用程序中使用的第一個表上的數據損壞?
任何與SQL服務器上的默認目錄有關的事情?也許你應該爲你的表加個前綴? – Alex