2010-04-13 59 views
3

我有一個處理一組記錄的方法。這個方法在處理後返回true \ false。所以,如果所有記錄都被處理(做一些數據庫更新),將返回true.Now,假設處理1條記錄後,拋出一些異常,是否應該在catch塊中寫入result = false(在返回方法結果的末尾)?並且,允許處理其他記錄?如何在這種情況下使用異常?

回答

1

當添加一條記錄失敗時,繼續向數據庫添加數據幾乎總是錯誤的。記錄經常是相關的。它們代表銀行賬戶中的一組交易。或來自客戶的一批訂單。添加這些與他們失去一個總是一個問題。

您不僅給您的客戶帶來一個包含單個更正記錄的新批處理的大問題,而且讓您容易讓人們忽略錯誤。那種直到很晚才發現或者導致問題的錯誤。總是伴隨着糾正錯誤的巨大代價。

發生錯誤時,拒絕整個批次。使用事務將dbase保持在適當的狀態。使用SqlTransaction並在啓動時調用BeginTransaction()。當一切正常時調用Commit(),在catch子句中調用Rollback()。

您的客戶現在可以返回到生成記錄的子系統,進行更正並重新運行您的程序。您的dbase將始終包含該子系統數據的正確副本。錯誤不能被忽略。

-1

我認爲這可能是類似的東西

int count = 0; 
    foreach(item in list) 
    { 

    try 
    { 
    //update DB 
    ++count; 
    } 
    catch(Exception ex) 
    { 
     //log exception 
    } 
    if(count == list.Count) 
     return true; 
    else return false; 

    } 

另一種方式

bool result = true; 
foreach(item in list) 
{ 

    try 
    { 
    //update DB 
    } 
    catch(Exception ex) 
    { 
     //log exception 
     result = false; 
    } 
    return result; 
} 
+0

你好,我們正在這樣做。在異常塊中,我們記錄異常 – jess 2010-04-13 10:58:30

+0

@Ahmed:這是一個錯誤的例子:空的catch塊非常令人沮喪。 – Marek 2010-04-13 10:59:45

+0

我更新了我的代碼 – 2010-04-13 11:01:18

0

你如何與例外處理,這將決定你所想要的東西的事件發生什麼很出錯了。正如你所說,你可以在你的catch塊中寫出result = false,但這意味着你只是對調用函數「嘿 - 一些記錄沒有被處理 - 與它一起生活......」說。這對你來說可能夠用了 - 這取決於你想要做什麼。

儘管如此,我還希望將例外的細節寫入日誌。如果你沒有一個方法需要排除異常並寫入日誌,那麼是時候寫一個(或者使用第三方解決方案...)

否則你會丟失可能有用的信息在確定爲什麼事情失敗...

無論你處理這些記錄,你可以或拋出一切,在出現問題是一個設計問題,只有你可以回答 - 我們沒有上下文...