2012-08-03 15 views
2

我正在使用ASP.NET/C#在C中使用try catch()的正確方法#

這裏是一個例子,我使用lambda expression來更新數據庫中的一些信息。

try 
{ 
    using (var db = new DataClasses1DataContext()) 
    { 
     var logSubGroup = db.sys_Log_Account_SubGroups 
      .SingleOrDefault(subGroup => subGroup.cSubGroupName.Equals(subGroupName)); 
     logSubGroup.cRejectedBy = rejectedBy; 
     logSubGroup.dRejectedOn = DateTime.Now; 
     logSubGroup.cAuthorizedStatus = "Rejected"; 
     db.SubmitChanges(); 
    } 
} 
catch (Exception ex) 
{ 
} 

正如你可以看到我沒有做內部catch() block什麼。

我知道這是一種使用try catch的可怕方式。

任何人都可以幫助我以正確的方式使用try catch block

我只是不知道什麼必須進入catch block裏面。

歡迎任何建議。

+0

捕獲異常的原因是什麼? 您是否想要注意,出現問題並將其傳達給某人,或者如果嘗試中的問題出錯了,您是否想要做某些事情? 如果不是,除try-catch之外還有其他可能性。 – Karl 2012-08-03 05:49:10

+0

在這個例子中,我認爲你應該檢查logSubGroup是否爲空:)不要捕獲null異常。例外情況例外。例如你不能計劃的東西。 – 2012-08-03 05:49:51

+0

@Karl除了try-catch之外,還有哪些其他的可能性?你能指出幾點嗎? – freebird 2012-08-03 05:56:35

回答

2

您應該理想地處理錯誤,以便您的應用程序可以從中恢復,但至少應該記錄它。你永遠不應該吞下它。另外,您不應該處理您不期望或無法處理的異常。例如,當打開一個文件時,FileNotFoundException可以預期和處理,例如通過顯示警告並讓用戶選擇另一個文件。

+0

感謝您的回答,您建議我只在我期待的時候處理異常,是嗎?謝謝。 – freebird 2012-08-03 05:53:22

+0

@freebird基本上,是的,因爲你不知道什麼是錯的或如何從錯誤中恢復。您的應用程序可能處於損壞狀態並破壞用戶數據。 – Botz3000 2012-08-03 05:57:54

+0

感謝您提出建議。非常感謝。 – freebird 2012-08-03 05:59:27

3

不要使用try-catch塊可言,除非你有一個具體原因搭上特定的異常

而是使用全局異常處理方法之一(ASP.NET中的Application_Error)全局捕獲未處理的異常,顯示錯誤消息並記錄錯誤。

+0

非常感謝答案,我會查看鏈接。謝謝。 – freebird 2012-08-03 05:51:53

3

作爲一般規則,如果捕獲異常的代碼無法解決問題,則無需捕獲異常,然後繼續正確運行。在你所呈現的代碼中,你能夠確定你可以在catch塊中採取的一些行動,將程序恢復到你信任它繼續運行的狀態嗎?如果沒有,那就讓異常冒出堆棧。

+0

感謝您的回答。謝謝。 – freebird 2012-08-03 05:54:58

1

理論上由您來決定在您的catch語句中可能出現的異常情況並非完全錯誤,當然如果您處於開發階段,那麼這樣做並不完全錯誤我絕不會建議您嘗試catch,因爲您可能會錯過一些可能發生的重要異常以及您想要解決的問題還包括一般情況下您應該包含一條消息或應發生的操作,如果發現異常或錯誤,則向用戶發送消息可能會通知該操作執行得並不順利理想情況下,您必須讓用戶知道出了什麼問題,所以在這種情況下,更好的錯誤處理是一種可行的方法

+0

非常感謝您的回答。 – freebird 2012-08-03 05:55:25