[c#] .NET에서 저장 프로 시저 인쇄 출력 캡처

.NET의 T-SQL 저장 프로 시저에서 인쇄 출력을 캡처 할 수 있습니까?

인쇄를 errorMessaging의 수단으로 사용하는 레거시 프로세스가 많이 있습니다. 예를 들어, 다음 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 = ???



답변

연결시 InfoMessage 이벤트에 이벤트 처리기를 추가하여이를 수행 할 수 있습니다 .

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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


답변

LinqPad의 출력 콘솔에서 Print 출력을 캡처하려는 경우 매우 편리합니다.

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


답변

출력을 변수로 가져 오려면 :

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);


답변