在.NET中捕获存储过程打印输出

Pet*_*ter 94 .net c# stored-procedures

是否可以从.NET中的TSQL存储过程捕获打印输出?

我有很多使用print作为errorMessaging方法的遗留过程.例如,是否可以从以下PROC访问outprint'word'?

-- The PROC
CREATE PROC usp_PrintWord AS
    PRINT 'word'
Run Code Online (Sandbox Code Playgroud)

Ada*_*Dev 141

您可以通过向连接上的InfoMessage事件添加事件处理程序来完成此操作.

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    myStringBuilderDefinedAsClassVariable.AppendLine(e.Message);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您还希望受影响的行计数,则需要SqlCommand上的StatementCompleted事件的处理程序. (4认同)

Bra*_*ath 8

如果要在LinqPad的输出控制台中捕获打印输出,这非常方便:

SqlConnection conn = new SqlConnection(ConnectionString);
//anonymous function to dump print statements to output console
conn.InfoMessage += (object obj, SqlInfoMessageEventArgs e)=>{
                e.Message.Dump();
            };
Run Code Online (Sandbox Code Playgroud)


Kei*_*ith 6

要将输出放入变量中:

string printOutput = "";

using (var conn = new SqlConnection(...))
{
    // handle this event to receive the print output
    conn.InfoMessage += (object obj, SqlInfoMessageEventArgs e) => {
        printOutput += e.Message;
    };

    // 
    // execute command, etc. here
    // 
}

Console.Write(printOutput);
Run Code Online (Sandbox Code Playgroud)