1

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

  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

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

PPS 我正在使用 SqlDataAdapter.Update 方法,并且一些代码在 SqlCommand 对象上使用了 DataReader。

4

1 回答 1

1

您可以在存储过程中使用 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
    }
于 2021-07-02T11:12:42.993 回答