Pregunta Salida de impresión del procedimiento de captura almacenada en .NET


¿Es posible capturar la salida de impresión de un procedimiento almacenado TSQL en .NET?

Tengo muchos Procs heredados que usan la impresión como medio de mensaje de error. Un ejemplo, ¿es posible acceder a la 'palabra' outprint de siguiente 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 = ???

76
2017-12-10 11:51


origen


Respuestas:


Puede hacer esto agregando un controlador de eventos al InfoMessage evento en la conexión.

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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

118
2017-12-10 11:58



Esto es realmente útil si quiere capturar impresiones en la consola de salida de LinqPad:

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

6
2018-05-13 23:05