可以 SQL 服务器 return 在不涉及任何错误的上下文中向 .NET System.Data.SqlClient 程序发送信息性消息

Can SQL Server return an informational message to .NET System.Data.SqlClient program in contexts that do not involve any error

是否可以使用 .NET 客户端程序,使用 System.Data.SqlClient 库与后端 SQL 服务器通信,以便服务器向客户端程序发送信息性消息 在不涉及任何错误的上下文中以及客户端程序获取已发送的消息?

  create proc NewFoo            
    @value text,
    @userid text
    as
    begin
     insert foo
     (name, createdby) values (@value, @userid);

     declare @recordcount int
     select @recordcount = count(*) from foo where createdby= @userid;

     if @recordcount = 100
         begin
           -- let user know they've created their 100th record. Woo-hoo!!
         end
   end

这是一个额外的伪代码示例,更接近实际用例;注意不同的严重程度:

 if @value > @maxallowed
   begin
      if @userlevel = 'manager' 
           raiserror('Exceeded max. Intentional?',10,1)
      else
           raiserror('Exceeds max. Your edit was not saved',11,1)
   end

P.S。在客户端命令对象中不使用 OUT 参数或 RETURN 值参数。

P.P.S。我正在使用 SqlDataAdapter.Update 方法,一些代码在 SqlCommand 对象上使用 DataReader。

您可以在存储过程中使用 PRINT,并通过订阅 SqlConnection 对象中的 InfoMessage 事件在代码中捕获它。

在你的 sql 中输入:

    PRINT 'Exceeded max. Intentional'

并在您的代码中像这样获取它:

    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();
        string msg = null;
        connection.InfoMessage += (sender, e) => { msg = e.Message; };
        // execute the procedure
        // check msg
    }