我正在使用SQLite-net訪問WinRT應用程序中的SQLite數據庫文件。我沒有任何問題使用ExecuteQuery從數據庫中讀取(我實際上使用https://github.com/praeclarum/sqlite-net/issues/82中的修改版本,因爲我不使用表映射並希望將結果作爲字典在下面調用ExecuteDeferredQuery)。第二次調用ExecuteNonQuery時發生SQLite-net拋出異常
當我嘗試使用ExecuteNonQuery
將記錄插入到我的數據庫中時,出現異常並顯示消息「CannotOpen」。
好吧,只要上面幾行,我就可以從數據庫中讀取成功。我仔細檢查了sqlite數據庫文件的文件權限,並將計算機上的所有人都完全控制到該文件以避免任何文件權限問題,但結果相同,仍然是「CannotOpen」。我試圖用ExecuteNonQuery做一個select語句(只是爲了看看它是否工作),我仍然得到一個異常,這次我說「Row」作爲異常消息。
我試圖執行我的插入與的executeQuery來看看會發生什麼,不會拋出異常,似乎一切都OK,但沒有行被插入到我的數據庫。
那麼,作爲的executeQuery是專爲查詢,不插入,可能是解釋的,但可能是什麼原因爲ExecuteNonQuery拋出異常?
這是我的代碼(刪除實際的表名稱和參數與隱私通用的):
SQLiteCommand cmd = conn.CreateCommand("insert into mytable(myfields...) values (?,?,?,?,?,?,?)", my parameters...);
cmd.ExecuteNonQuery(); //throws SQLiteException
但是這個代碼不拋出異常:
SQLiteCommand cmd = conn.CreateCommand("select * from mytable where some condition...", some parameters...);
var result = cmd.ExecuteToDictionary(); //renamed ExecuteQuery method from https://github.com/praeclarum/sqlite-net/issues/82
更新:我進一步跟蹤問題下來的東西更簡單(和怪異)。這段代碼是連接初始化後第一次調用SQLite框架。這個非常的代碼執行時,在第四行拋出異常:
SQLiteCommand cmd = conn.CreateCommand("select * from mytable");
cmd.ExecuteNonQuery();
cmd = conn.CreateCommand("select * from mytable"); //yes, the same simple query as above
cmd.ExecuteNonQuery();//getting error
更新2:如果我叫ExecuteToDictionary代替的ExecuteNonQuery,它的工作原理。
更新3:如果我嘗試直接查詢(從conn
對象,如conn.Execute("query...")
)所有這些電話失敗了。如果是插入查詢,我得到CannotOpen
錯誤,如果它是一個選擇查詢,我得到一個錯誤。
爲什麼第二次調用ExecuteNonQuery時會出現異常?
爲什麼我在用ExecuteNonQuery嘗試SELECT時收到不同的錯誤消息「Row」?最後,爲什麼這些例外對用戶不友好?
我對您的問題進行了格式化,因此更容易理解... – rene
@rene謝謝。我意識到我已經在一個地方問了一些問題:) –
如果您提供了一個可以重現錯誤的代碼示例,可能會有所幫助。 –