.NET में संग्रहीत कार्यविधि प्रिंट आउटपुट कैप्चर करें


97

क्या .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 = ???

4
यह शायद त्रुटियों के बारे में ही नहीं है। मैं जानकारीपूर्ण आउटपुट को देखकर लंबे समय तक संग्रहीत संग्रह की प्रगति का ट्रैक रखने के लिए इसका उपयोग करने का प्रयास करूंगा।
Csaba Toth

जवाबों:


143

आप कनेक्शन पर InfoMessage ईवेंट में इवेंट हैंडलर जोड़कर ऐसा कर सकते हैं ।

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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

5
यदि आप भी पंक्तियों को गिनना चाहते हैं, तो आपको SqlCommand पर दिए गए स्टेटमेंट कमेंटेड इवेंट के लिए एक हैंडलर की आवश्यकता है।
निकोलस

@ निकोलस क्या आप विस्तृत कर सकते हैं? मैं ठीक से काम करने के लिए उस घटना को प्राप्त नहीं कर सकता। कृपया stackoverflow.com/questions/27993049/…
श्री टीए

क्या आप उस घटना के साथ sql सर्वर के भीतर उत्पन्न सभी संदेशों को पकड़ रहे हैं? क्या यह संभव है कि यह घटना उस संग्रहित प्रक्रिया द्वारा निर्मित न होकर कुछ अन्य संदेशों को भी पकड़ लेगी?
FrenkyB

यह स्पष्ट हो सकता है, लेकिन यदि खरीद से कोई आउटपुट नहीं है (कोई प्रिंट, इंप्रूवर इत्यादि) नहीं है, तो घटना शुरू नहीं होती है। इसने मुझे थोड़ी देर के लिए रोक दिया जब तक मुझे एहसास नहीं हुआ कि क्या हो रहा है।
आयरनरॉड

@FrenkyB मैं पुष्टि कर सकता हूं कि यह आह्वान किए गए प्रोक या किसी भी प्रोक्स या फ़ंक्शंस से सभी आउटपुट (प्रिंट, किशमिश, आदि) को कैप्चर करेगा, जिसे वह कॉल करता है।
आयरनरोड

9

यदि आप LinqPad के आउटपुट कंसोल में प्रिंट आउटपुट कैप्चर करना चाहते हैं तो यह वास्तव में आसान है:

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

1

एक चर में उत्पादन पाने के लिए:

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.