2014-02-26 89 views
1

背景:
1.及其使用SQLite DATABSE
2.本應用程序創建空分貝如果分貝不存在和同步數據,將其從服務器C#應用程序。SQLite的 - 未能連接數據庫

問題:
1.應用程序有時會突然崩潰。看起來像有一些未處理的異常。
2.即使我重新啓動應用程序,它立即崩潰。

臨時解決方案:
1.將db複製到其他位置並刪除原始數據庫。
2.運行應用程序。沒有崩潰。由於沒有數據庫存在,因此應用程序創建了空數據庫。
3.複製備份數據庫和嗚呼應用程序啓動正常,沒有任何崩潰。

我的問題:
1.如何應用正在與老分貝,因爲它是前面多次崩潰的應用程序?

注:
1.我沒能重現此崩潰調試因爲我不知道在這種情況下它是越來越失敗。
2.任何輸入將不勝感激,所以不要猶豫猜測解決方案。

預測:
1.一些支持臨時文件是不一致的狀態,造成的問題,同時連接到數據庫,當我們正在創建具有相同的名稱,那麼這些文件被改寫爲新鮮一致的新一個新的數據庫文件。

+0

添加一些日誌,而不僅僅是一個崩潰,你會得到一個堆棧跟蹤和一個詳細的異常。 – ken2k

+1

對不起。如果你不能告訴我們什麼是例外情況,那麼其他人就無法做到。處理應用程序中的所有異常,並使用Log4Net或其他東西將它們記錄到文件中。 –

+0

應用程序沒有日誌,並且它不經常發生,我無法在生產中部署帶有日誌和捕獲語句的新代碼 –

回答

2

我首先想說的是,我認爲沒有任何代碼或錯誤,沒有人能回答你的問題。

  1. 任何輸入將被理解的,所以不要毫不猶豫地猜測該溶液中。


所以我就扔這在這裏:

有很多事情可以讓你的應用程序崩潰或給出錯誤,如:
- 應用程序是不相符的
- 數據庫創建在您的應用程序中出錯
- 權限?
- 連接甚至做任何事情
之前出現問題 - 連接出了問題,因爲道路是錯誤的
- 連接,因爲你的數據庫不存在
出錯 - 正在同步出錯

您是否嘗試過在看電腦的日誌?
你有沒有更新你正在使用的一切。
從你的描述中我猜你的代碼中的某個地方會改變你的數據庫,這會讓你的整個應用程序失敗。

注意: 1.我沒有在調試中重現此崩潰,因爲我不知道它在哪種情況下失敗。

因此,當您正常運行應用程序時,您可能會遇到崩潰,但在調試時無法重現它。 這是否只發生在您的計算機上或這是否也發生在其他enviremonts

我知道這可能是不是你要找的答案,但你可以檢查所有這一切如果u想要的。(如果需要的話我會刪除它)

祝你好運!

1

可能是有人傷害了數據庫文件。也許這是你自己的應用,如果它包含多個線程,或者如果你同時啓動幾個實例。默認情況下,SQLite能夠處理這些情況,但是有一些配置選項可以使其不是線程安全的。看看documentation。或者,也許,你的應用程序直接修改數據庫文件,繞過SQLite(檢查你使用的路徑)。

也許SQLite無法在數據庫附近創建預寫日誌文件,如果在某些事務處於活動狀態時應用程序被終止,則會導致無法恢復的數據庫損壞。

SQlite的數據庫格式爲documented,因此您可以比較有效和損壞的文件並找出它的哪部分損壞。

作爲最後的手段,您可以使用SQLite的源代碼通過調試信息構建自己的庫。