2010-06-23 65 views
0

我總是使用try catch來處理與數據庫相關的操作,例如。數據庫插入,更新和刪除應該包含在try/catch中嗎?

try 
{ 
DataContext.AddtoObjectname(obj); 
DataContext.SaveChanges(); 
} 
catch(Exception e) 
{ 
throw new Exception("Problems adding object" + e); 
} 

但我讀到的try/catch影響表現在這裏 -
Do try/catch blocks hurt performance when exceptions are not thrown?
所以我要補充嘗試捕捉的東西,我做以上或者我應該選擇otherwise.Thanks對您有所幫助。

+0

是的,否則你將如何告訴客戶端該操作的狀態。 – 2010-06-23 16:27:17

+1

如何捕捉所有異常,然後拋出一個新的幫助? – 2010-06-23 16:28:46

回答

4

Try/Catch語句本身不會顯着影響性能,但可能引發和捕獲大量異常。

通常,您要確保只捕獲相關異常 - 否則可能會掩蓋應用程序中的錯誤。在這種情況下,DataExceptionUpdateException可能是很好的候選者,因爲它們是SaveChanges中出現問題時將拋出的異常。

看來你正在捕捉異常以向其添加自己的附加信息。在這種情況下,最好將原始異常保留爲內部異常。

throw new Exception("Problems adding object" + e, e); 

我還建議爲此創建您自己的特定於應用程序的異常類型。

+1

你絕對不應該拋出'Exception'。 FxCop阻止這一點,並有充分的理由。 – 2010-06-23 16:57:35

1

這取決於。如果您只打算重新拋出異常,那麼沒有必要試着抓住它。您將添加代碼而不提供任何實際價值。如果你要對異常做些事情,記錄它,檢查特定的類型等,這是不同的,因爲你打算採取意想不到的行爲。

但我讀到的try/catch影響 性能..

嘗試捕捉是不是真正影響性能,其創造的異常是「昂貴」的操作。真的在大範圍的事情中並不是那麼糟糕,而且由於「費用」,你不應該避免例外。

在相關說明中,如果您嘗試捕獲,除非您需要避免創建新的異常。只需重新拋出舊的異常。

2
  • 只有抓住你能處理的東西。如果您無法處理錯誤並正常恢復,請讓異常進入可處理該錯誤的更高級別。如果您想在發生異常(合理)的情況下記錄異常,那麼記錄它並在無法恢復時重新拋出相同的異常。

  • 作爲一般規則,絕對不要接收一般的異常。相反,明確指定例外:的catch (SQLException e)代替catch (Exception e)

  • 如果拋出從catch塊的異常,務必把捕捉到的異常到新的內部異常。

  • 不要扔Exception,更具體。如果框架還沒有你需要的例外,那麼創建一個。

0

是的,這是什麼嘗試/趕上。失去控制權並有可能導致數據庫處於不一致狀態的風險高於try/catch開銷。如果有例外,一般來說沒有「便宜」的方法來處理......

相關問題