2011-12-12 81 views
0

我正在做一個網站,我使用實體框架連接到數據庫。 我應該把Try/catch數據庫連接?

try 
    { 
var query = from es in gr.sales 
         orderby es.tilbudsNavn 
         select es; 
    } 
    catch 
{ 
lblError = "Sorry but you can't connecto to the database right now, try again later"; 
} 

周圍所有的數據庫連接?

+1

這裏需要更多的信息。爲什麼你認爲你需要嘗試抓住每個連接,你害怕會發生什麼錯誤?你是否在使用任何類型的記錄器(log4net)來記錄這些錯誤等等。通常,如果你有錯誤,你想用它做一些事情,至少它應該讓你知道有什麼地方是錯誤的,所以你可以修復它。 – Zoidberg

+1

這取決於上下文。如果你想提供一個「再試一次」按鈕,如果它失敗了,那麼是的。如果你不打算做任何事情並將它們重定向到錯誤頁面,那麼不要在那裏處理它,讓它冒泡到你的下一個異常處理程序。 – ThePower

回答

3

可能不會 - 除非您想忽略無法連接到數據庫的情況(這可能會使其無效)。一些適當的錯誤處理,如果你重定向到一個錯誤頁面,並且如果可能的話執行某種通知(例如,向你發送一個包含錯誤細節的電子郵件)會更有用。

0

使用try catch語句處理任何可能的錯誤總是一個好主意。文件處理,數據庫處理,與您的應用程序的任何I/O通常是一個好主意,以包裝錯誤處理代碼,希望能夠恢復錯誤或退出與信息性的消息和通知給用戶和管理員。

0

只有當您可以在catch條款中執行某些有用的操作時纔有效。絕不要使用空的catch子句,因爲這會吞噬所有數據庫錯誤。

1

您應該從一個地方管理對數據庫的訪問。而且,是的,在那個單獨的地方,connect-statement應該被try-catch包圍起來,以方便記錄和錯誤報告。

0

最好使用帶有幾個參數的Try-Catch創建一個方法,其中一個是lambda或func或要執行的操作。

所以你所有的處理將在一個地方。

此外,您還可以讀到這裏herehere

0

http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx

有關於通過埃裏克利珀異常的好文章。它描述了什麼應該被捕獲,什麼不可以。

至於你的例子,我會把一個數據庫連接例外的「外生」類應該抓住。至少對於正確的錯誤處理以及數據庫訪問是否至關重要,請使用適當的消息/日誌記錄關閉應用程序。