.NET- এ স্টোর করা পদ্ধতি মুদ্রণ আউটপুট ক্যাপচার করুন ure


97

.NET- এ কোনও টি-এসকিউএল সঞ্চিত প্রক্রিয়া থেকে মুদ্রণ আউটপুট ক্যাপচার করা কি সম্ভব?

আমার কাছে প্রচুর লিগ্যাসি প্রোক রয়েছে যা ত্রুটিমেশনের মাধ্যম হিসাবে মুদ্রণটি ব্যবহার করে। একটি উদাহরণ, নীচের পিআরসি থেকে আউটপ্রিন্ট 'শব্দ' অ্যাক্সেস করা সম্ভব?

-- 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
এটি কেবল ত্রুটি সম্পর্কেই নয়। তথ্যবহুল আউটপুট দেখে আমি দীর্ঘকাল ধরে সঞ্চিত সংগ্রহের অগ্রগতির ট্র্যাক রাখতে এটি ব্যবহার করার চেষ্টা করব।
সিএসবা তোথ

উত্তর:


143

আপনি সংযোগের ইনফরমেশন ইভেন্টে ইভেন্ট হ্যান্ডলার যুক্ত করে এটি করতে পারেন ।

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

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

4
আপনি যদি সারিগুলিকে প্রভাবিত গণনা চান তবে আপনার স্কেলকম্যান্ডে স্টেটমেন্ট কমপ্লিট ইভেন্টের জন্য একটি হ্যান্ডলার দরকার।
নিকোলাস

@ নিকোলাস আপনি কি বিস্তারিত বলতে পারবেন? আমি সেই ইভেন্টটি সঠিকভাবে কাজ করতে পারি না। দয়া করে stackoverflow.com/questions/27993049/… দেখুন
জনাব টিএ

আপনি কি এই ইভেন্টটির সাথে স্কেল সার্ভারের মধ্যে উত্পাদিত সমস্ত বার্তা ধরছেন? এটি কি সম্ভব যে এই ইভেন্টটি অন্য কিছু বার্তাও ধারণ করবে, সেই সঞ্চয় হওয়া পদ্ধতি দ্বারা উত্পাদিত হয়নি?
ফ্রেনকিবি

এটি সুস্পষ্ট হতে পারে তবে যদি প্রোক থেকে কোনও আউটপুট না থাকে (কোনও মুদ্রণ, উত্থাপনকারী, ইত্যাদি) তবে ইভেন্টটি ট্রিগার করা হবে না। আমি কী ঘটছে তা বুঝতে না পারলে এটি আমাকে কিছুক্ষণ থামিয়ে দিয়েছে।
আয়রন রড

@ ফ্রেঙ্কিবি আমি নিশ্চিত করতে পারি যে এটি আহ্বান করা প্রাক বা যে কোনও প্রকাক বা ফাংশন যা এটি কল করে তার থেকে সমস্ত আউটপুট (মুদ্রণ, রেজারার ইত্যাদি) ক্যাপচার করবে।
আয়রনরড

9

আপনি যদি লিনকপ্যাডের আউটপুট কনসোলে মুদ্রণ আউটপুট ক্যাপচার করতে চান তবে এটি সত্যিই সহজ:

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.