返回受每个INSERT上存储过程影响的行以显示在ASP.NET页中

Dro*_*ror 5 c# sql-server asp.net sql-server-2008

我有一个存储过程,其中包含类似10个不同的INSERTS,是否可以将每个INSERT上受影响的行的COUNT返回到ASP.NET c#页,以便为查看该ASP.NET页的客户端显示存储过程?

Iva*_*n G 2

在服务器端,使用严重性为 10 的函数将消息发送到客户端RAISERROR(严重性高于 10 会导致中断过程执行的异常,即将执行转移到块CATCH,如果有的话)。在下面的示例中,我没有添加错误号,因此函数将使用默认错误号 50000 RAISERROR。这是示例:

DECLARE @count INT = 0
DECLARE @infoMessage VARCHAR(1000) = ''

-- INSERT

SET @count = @@ROWCOUNT
SET @infoMessage = 'Number of rows affected ' + CAST(@count AS VARCHAR(10))
RAISERROR(@infoMessage, 10, 0) WITH NOWAIT

-- another INSERT

SET @count = @@ROWCOUNT
SET @infoMessage = 'Number of rows affected ' + CAST(@count AS VARCHAR(10))
RAISERROR(@infoMessage, 10, 0) WITH NOWAIT
Run Code Online (Sandbox Code Playgroud)

在客户端,设置适当的事件处理程序,下面是一个示例:

using (SqlConnection conn = new SqlConnection(...))
{
    conn.FireInfoMessageEventOnUserErrors = true;
    conn.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage);
    using (SqlCommand comm = new SqlCommand("dbo.sp1", conn) 
           { CommandType = CommandType.StoredProcedure })
    {
        conn.Open(); 
        comm.ExecuteNonQuery();
    }
}

static void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    // Process received message
}
Run Code Online (Sandbox Code Playgroud)