处理错误时如何获取数据

时间:2012-01-16 12:17:47

标签: c# sql sql-server-2000

我有一个程序,它列出了一堆发票,然后为每个发票调用另一个程序来处理它们。如果存在配置问题,则处理过程可能会失败。要解决此问题,处理过程将在事务中运行,并在出现错误时回滚。在查看完所有发票后,列表程序会返回发票ID和标记列表,以显示哪些失败,哪些正常。

我的问题是,当我在C#程序中调用此列表过程,并且其中一个处理过程失败时,错误消息将通过,我无法访问包含发票ID和错误标志列表的记录集。过程在Management Studio中有效:错误显示在消息选项卡中,但结果选项卡还显示已返回的发票列表。但是在代码中DataAdapter.Fill()方法失败了就是这样。在这种情况下,如何检索发票清单?或者我可以以某种方式清除错误消息吗?

注意:它必须在SQL 2000和2008中运行。

1 个答案:

答案 0 :(得分:0)

我相信这是您需要记住的最重要的一点: 处理发票时出错时,您的程序不应该返回错误:由于发票是程序中的商务元素,因此应将其视为“预期”或“可删除”错误,应正确处理。 换句话说,在这种情况下,您应该使用返回参数将错误号和可能的错误描述返回给调用者,同时仍然允许您获取结果集。或者更好的是,结果集中存在“失败的发票”应该足以让您的调用方法确定出错了...... 要回答你的问题,是的,我确实认为DataAdapter会在检测到错误后立即刷新结果流(不确定!).... 我也相信你使用ADO命令调用会遇到同样的问题。连接....

请始终牢记这一点:如果您可以预测某个过程(SQL或任何编程语言)中可能出现错误,则不应该引发错误,而是在那里处理错误并使用返回参数告诉调用方法出错了。

所以我会将你的SQL proc重写为: 1)将结果集存储在表变量中 2)抓住错误 3)将错误信息存储在return params中 4)回滚proc 5)从变量表

生成结果集

然后,您将能够从输出参数中获取错误消息和#,PLUS获取结果集。但同样,您的调用方法应该包含包含错误的结果集,以检测是否发生了“EXPECTED”错误....

我知道这不是一个完美或完整的解决方案,但作为一般概念,它应该有效!