2

我有一个用于测试目的的存储过程总是抛出错误。

UPDATE [Test]
    SET  [1.1] = 0
        ,[1.2] = 0
        ,[1.3] = 0
        ,[1.4] = 0

    WHERE Record_ID = 2 AND
          [1.1] = 0 AND
          [1.2] = 0 AND
          [1.3] = 0 AND
          [1.4] = 0
if(@@ROWCOUNT = 0)
    begin 
    raiserror('Error on purpose',16,1)
END

虽然错误在 SQL MGMT studio 中引发,但它不会在 asp.net 的 try/catch 块中触发。

我这样称呼SP:

try {
     dataContext.TESTProcedure();
}
catch(Exception ex)
{
    string error = ex.Message;
}

我已经逐步完成了代码,即使它应该进入,它也永远不会进入。

出了什么问题?

4

1 回答 1

0

我会更深入地了解 dataContext 正在做什么。如果在幕后使用数据读取器,则可能必须前进到下一个结果集才能得到错误。

称呼

NextResult

在阅读器上。了解更多信息:

“那么我们如何让它工作?好吧,当使用 SqlDataReader 时,它只会遍历第一个结果集,在这种情况下,它将是存储过程中的选择。这个结果集将是空的,因为没有数据对于 ID 号 10。因此没有显示任何内容,也没有访问第二个结果集。我们要做的就是移动到下一个结果集以获取错误。

一种方法如下,即,这将继续遍历所有返回的结果集,直到 SqlDataReader 关闭,当没有更多结果集返回时。

http://blogs.msdn.com/b/spike/archive/2009/04/06/catch-a-sql-server-raiserror-at-client-side-using-sqldatareader.aspx

于 2013-11-05T15:27:21.277 回答