代码之家  ›  专栏  ›  技术社区  ›  Abdu

SQL Server Raiserror不会在.NET客户端中引发异常

  •  5
  • Abdu  · 技术社区  · 15 年前

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

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

    它是从一个像这样的客户那里打来的:

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

    但是也没有例外。测试时,SP中的条件始终为真。为了验证这一点,我从SQL Server事件探查器复制了调用,并在查询窗口中执行了该调用,并打印了错误消息,这意味着引发了错误。

    不知道发生了什么。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Abdu    15 年前

    我检查了SQL助手类,发现executescalar会接受异常并返回空值。我换成了Executedataset,但它不这么做。我期待着不同的执行……方法的行为方式相同。另一种方法是使用executescalar,当SP检测到错误时,它会选择一些可以在客户机中处理的错误号。

        2
  •  2
  •   ozczecho    15 年前

    根据SQL联机丛书,严重性为16“表示用户可以更正的一般错误。”—因此严重性是正常的。

    我只需要使用SQL 2008,但是我已经测试了raiserror(“一些错误消息”,16,1),并且在我的C应用程序中捕获了错误。您确定在“sqlHelper”类中没有处理该错误吗?

        3
  •  1
  •   Neil Roberts    15 年前

    从网上的书

    指定10或更低的严重性以使用raiserror从try块返回消息 没有 调用catch块。

        4
  •  0
  •   Chris W    15 年前

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