Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在处理错误时获取数据_C#_Sql_Sql Server 2000 - Fatal编程技术网

C# 如何在处理错误时获取数据

C# 如何在处理错误时获取数据,c#,sql,sql-server-2000,C#,Sql,Sql Server 2000,我有一个过程,它列出了一堆发票,然后为每个发票调用另一个过程来处理它们。如果存在配置问题,处理过程可能会失败。为了解决这个问题,处理过程在事务中运行,如果出现错误,则回滚。查看所有发票后,列表过程返回发票ID和标志的列表,以显示哪些失败,哪些正常 我的问题是,当我在C程序中调用这个列表过程时,其中一个处理过程失败,错误消息就会通过,我无法访问包含发票ID和错误标志列表的记录集。过程在ManagementStudio中工作:错误显示在messages选项卡中,但results选项卡也显示返回的发票

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

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


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

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

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

因此,我会将您的SQL过程重写为: 1将结果集存储在表变量中 2.抓住错误 3将错误信息存储在返回参数中 4回滚进程 5从变量表生成结果集

然后,您将能够从输出参数中获取错误消息,并获得结果集。但同样,包含错误的resultset应该足以让调用方法检测到发生了预期的错误


我知道作为一个解决方案,这不是完美或完整的,但作为一个总体想法,它应该是可行的

处理事件是否对您有帮助?它不会触发。可能是因为没有实际的错误停止执行。我要寻找的是意外错误的故障保护。该过程本身不会生成任何错误。