C# - SqlConnection的InfoMessage仅在执行结束时触发

11

我正在使用

sqlConnection.InfoMessage += new SqlInfoMessageEventHandler(sqlConnection_InfoMessage);

使用ExecuteNonQuery()来执行存储过程。

我正在使用RAISERROR("Custom Message", 10 , 1) WITH NOWAIT在存储过程中抛出消息。

我希望在处理时得到SQL服务器抛出的所有消息,而不是在查询执行结束时才收到。

通过设置sqlConnection.FireInfoMessageEventOnUserErrors = true;可以实时获取所有消息,但这会导致严重程度大于10的错误也被SqlInfoMessageEventHandler处理,我想将其作为异常抛出。

有没有办法在事件处理程序中实时获取我的自定义SQL信息消息(严重性为10),其他消息作为异常处理?

1个回答

22

看起来问题出在 ExecuteNonQuery() 上。

在我的情况下,我使用了 ExecuteScalar() 并移除了以下这行:

sqlConnection.FireInfoMessageEventOnUserErrors = true;

这会导致 RAISERROR("自定义消息", 10, 1) WITH NOWAIT 被事件处理程序捕获并在实时中作为其他异常。


使用ExecuteScalar而不是ExecuteNonQuery对我很有帮助,谢谢! - Agustin Garzon
+1 这对我也行。但是需要注意的一点是:据我所知,如果您的查询返回任何结果集,则 ExecuteScalar() 忽略第一个结果集之后的所有内容,包括任何进一步的消息。在这种情况下,我不得不回到使用带有 FireInfoMessageEventOnUserErrors = trueExecuteNonQuery() - Scott M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接