如何在这种情况下使用异常?

时间:2010-04-13 10:52:33

标签: c# c#-3.0 exception

我有一个处理一组记录的方法。这个方法在处理后返回true \ false。因此,如果处理完所有记录(做一些数据库更新),将返回true。现在,假设在处理1条记录之后,抛出一些异常,我应该在catch块中写result = false(在返回方法结果的最后)?并且,允许处理其他记录吗?

3 个答案:

答案 0 :(得分:1)

在添加一条记录失败时,继续向dbase添加数据几乎总是错误的。记录经常相关。它们代表银行账户上的一组交易。或者来自客户的一批订单。在缺少其中一个的情况下添加它们总是一个问题。

你不仅要给你的客户一个包含单个更正记录的新批处理的巨大问题,你也很容易让人忽略错误。直到很久之后才会发现或导致问题的错误类型。总是需要与纠正错误相关的巨额费用。

发生错误时,请拒绝整批。通过使用事务将dbase保持在适当的状态。例如,使用SqlTransaction并在启动时调用BeginTransaction()。当一切正常时调用Commit(),在catch子句中调用Rollback()。

您的客户现在可以返回生成记录的子系统,进行更正并重新运行您的程序。您的dbase将始终包含该子系统数据的正确副本。错误也不容忽视。

答案 1 :(得分:0)

如何处理这种异常将取决于您在出现问题时想要发生的事情。正如你所说,你可以在catch块中写出result = false,但这意味着你只是对调用函数说“嘿 - 有些记录没有被处理 - 与它一起生活......”。这对你来说已经足够了 - 这取决于你想要做什么。

至少,我还希望将异常的详细信息写入日志。如果你没有某个方法需要异常并写入日志,那么是时候编写一个(或使用第三方解决方案......)

否则,您将丢失可能有助于确定失败原因的信息......

您是否可以处理这些记录,或者在出现问题时将所有记录丢弃,这是一个只有您可以回答的设计问题 - 我们没有上下文......

答案 2 :(得分:-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;
 }