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