System.Data.SqlClient将存储过程中的SQL Server PRINT语句与RAISERROR消息连接在一起

问题描述

我相当简单的存储过程在第44行上完成了此操作

IF @a = @b
    RAISERROR('blah blah blah',11,1)
    RETURN

使用.NET Framework System.Data.sqlClient库在客户端调用存储过程:

   try
   {
        sqlCommand c = new sqlCommand();
        c.CommandType = CommandType.StoredProcedure;
        c.CommandText = "procname";
        c.ExecuteNonQuery()   // execute the stored procedure 
   }
   catch(sqlException sex)
       throw sex;
   catch(Exception ex)
   {
        throw ex;
   }

捕获ex时,其值为blah blah blah + CRLF + 1259

1259来自哪里?它对应于严重性11吗?

解决方法

啊哈!刚发现。在RAISERROR上方的几行中有一个PRINT语句。不知道(无关)PRINT语句会附加到错误消息!

  PRINT 'Fee fie fo fum'

  <snip>

  if @a = @b
     RAISERROR('blah blah blah',11,1)
     return

客户端的SqlException消息属性是“等等等等” + CRLF +“费用当即”