SQL Server Raiserror不会在.NET客户端中导致异常

时间:2009-06-18 01:42:34

标签: sql-server

我在SQL Server 2005数据库上有一个存储过程,其中包含如下语句:

  IF @Condition = 0
    BEGIN
        RAISERROR('some error message',16,1)
        RETURN
    END

它从C#客户端调用,如下所示:

 try
           {
                SomeVariable = SqlHelper.ExecuteScalar(GetConnectionString(), "MySP", new object[] { param1, param2});
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.Message);
            }

然而,没有例外被提出。 SP中的条件始终适用于测试。为了验证这一点,我从SQL Server Profiler复制了调用并在查询窗口中执行了它,并且打印了ErrorMessage,这意味着引发了错误。

不确定发生了什么。

4 个答案:

答案 0 :(得分:6)

我浏览了SQL Helper类,发现ExecuteScalar吃了异常并返回null。我切换到不执行此操作的ExecuteDataSet。我期望不同的Execute ..方法的行为方式相同。另一种方法是使用ExecuteScalar,当SP检测到错误时,它会执行一些SELECT错误号,可以在客户端中处理。

答案 1 :(得分:2)

根据SQL Books的在线严重性为16“表示可以由用户更正的一般错误。” - 这样严重性就可以了。

我只有SQL 2008可以使用,但我测试了RAISERROR('一些错误消息',16,1)并且我的c#app中发现了错误。你确定你的“SqlHelper”类没有处理错误吗?

答案 2 :(得分:1)

来自在线图书

指定严重性为10或更低,以使用RAISERROR从TRY块返回消息,而不用调用CATCH块。

答案 3 :(得分:0)

是否与严重性级别有关?如果您将严重性提高到19,它会将异常提升到您的代码吗?