【问题标题】:How to get data when there is handled errors处理错误时如何获取数据
【发布时间】:2012-02-11 09:20:15
【问题描述】:

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

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

注意:它必须在 SQL 2000 和 2008 中工作。

【问题讨论】:

  • 处理FillError 事件对您有什么帮助吗?
  • 它不会触发。可能是因为没有停止执行的实际错误。

标签: c# sql sql-server-2000


【解决方案1】:

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

请始终牢记这一点:如果您可以预测过程中可能会发生错误(无论是 SQL 还是任何编程语言),您不应该让错误被引发,而是在那里处理它并使用返回参数告诉调用方法出了点问题。

所以我会将您的 SQL 过程重写为: 1) 将结果集存储在表变量中 2)捕捉错误 3)将错误信息存储在返回参数中 4)回滚过程 5) 从变量表中生成结果集

然后,您将能够从您的输出参数中获得一条错误消息和#,此外还可以获得您的结果集。但是同样,包含错误的结果集应该足以让您的调用方法检测到发生“预期”错误....

我知道这作为一个解决方案并不完美或不完整,但总的来说,它应该可以工作!

【讨论】:

  • 我正在寻找的是针对意外错误的故障保护。该过程本身不会产生任何错误。
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2021-01-08
  • 2021-12-19
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
相关资源
最近更新 更多