web-dev-qa-db-fra.com

Capturer la sortie d'impression de la procédure stockée dans .NET

Est-il possible de capturer la sortie d'impression d'une procédure stockée T-SQL dans .NET?

J'ai beaucoup de processus hérités qui utilisent l'impression comme moyen d'erreur de messagerie. Par exemple, est-il possible d'accéder à l'outprint 'Word' à partir de PROC suivant?

-- 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 = ???
92
Peter

Vous pouvez le faire en ajoutant un gestionnaire d'événements à l'événement InfoMessage sur la connexion.

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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

C'est vraiment pratique si vous voulez capturer la sortie d'impression dans la console de sortie 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();
            };
8
BraveNewMath

Pour obtenir la sortie dans une variable:

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