1

我正在使用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」?最後,爲什麼這些例外對用戶不友好?

+0

我對您的問題進行了格式化,因此更容易理解... – rene

+0

@rene謝謝。我意識到我已經在一個地方問了一些問題:) –

+0

如果您提供了一個可以重現錯誤的代碼示例,可能會有所幫助。 –

回答

3

找到了答案之前打開的連接對象。 SQLite文件位於沒有寫入權限的目錄中(文件DID具有文件屬性中的所有訪問權限,但我認爲這是WinRT安全模型問題,因爲該文件位於WinRT存儲文件夾的沙箱外部。該文件,但不寫。感謝SQLite-net的極其有用的異常消息,例如「Row」和「CannotOpen」,但沒有提供任何有關該問題的實際細節,花了我數天的時間才意識到這是文件訪問問題而不是SQLite配置/查詢問題。

如果將來有人有類似的問題,首先檢查SQLite數據庫是否在WinRT應用程序的存儲目錄中。

0

嘗試關閉和執行任何其它操作

+0

試圖關閉並重新創建查詢之間的連接,遺憾的是沒有任何改變。 –

+0

然後用相同的連接對象創建一個新的命令對象,並嘗試 –

+0

你甚至讀過我的問題嗎?我已經做了他們。 –

相關問題