Захват хранимой процедуры печати вывода в .NET.

Можно ли захватить вывод на печать из хранимой процедуры T-SQL в .NET?

У меня есть много устаревших процедур, которые используют печать как средство сообщения об ошибках. Например, возможно ли получить доступ к надписи "слово" из следующего PROC?

-- The PROC
CREATE PROC usp_PrintWord AS
    PRINT 'word'
// Some C# Code to would like to pull out 'word'
SqlCommand cmd = new SqlCommand("usp_printWord", TheConnection);
cmd.CommandType = CommandType.StoredProcedure;
// string ProcPrint = ???

Ответ 1

Вы можете сделать это, добавив обработчик события в InfoMessage событие в соединении.

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    myStringBuilderDefinedAsClassVariable.AppendLine(e.Message);
}

Ответ 2

Это действительно удобно, если вы хотите захватить вывод на печать в консоли вывода LinqPad:

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

Ответ 3

Чтобы получить вывод в переменную:

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.
}

Console.Write(printOutput);