2010-04-13 34 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,但这意味着你只是对调用函数“嘿 - 一些记录没有被处理 - 与它一起生活......”说。这对你来说可能够用了 - 这取决于你想要做什么。

尽管如此,我还希望将例外的细节写入日志。如果你没有一个方法需要排除异常并写入日志,那么是时候写一个(或者使用第三方解决方案...)

否则你会丢失可能有用的信息在确定为什么事情失败...

无论你处理这些记录,你可以或抛出一切,在出现问题是一个设计问题,只有你可以回答 - 我们没有上下文...