2010-07-20 4 views
14

में एक SQL सर्वर संग्रहीत प्रक्रिया की असीमित कॉल क्या एसक्यूएल सर्वर संग्रहीत प्रक्रिया को असीमित रूप से को सी # के माध्यम से कॉल करना संभव है?सी #

मेरे पास एक संग्रहित प्रक्रिया है जो एक विशिष्ट डेटाबेस का बैकअप लिखती है (इसमें पूरा होने में लंबा समय लग सकता है) और मैं विंडोज़ फॉर्म में बैकअप प्रक्रिया की प्रगति दिखाना चाहता हूं (इसके लिए मैं http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx का उपयोग करता हूं)। या क्या मुझे पृष्ठभूमि कार्यकर्ता नियंत्रण का उपयोग करना चाहिए और एसपी को पृष्ठभूमि पृष्ठभूमि (स्वयं धागा) में चलाया जाना चाहिए?

उत्तर

0

मैं इसे एक अलग थ्रेड में भी कर सकता था, इसलिए मैं शायद पृष्ठभूमिवर्कर दृष्टिकोण के लिए जाऊंगा।

12

अपने SqlCommand में आप BeginExecuteNonQuery और EndExecuteNonQuery का उपयोग करके अतुल्यकालिक रूप से आदेश चला सकते हैं। उत्तरार्द्ध इसे पूरा होने तक अवरुद्ध करेगा। हालांकि यह बैकअप के बारे में सर्वर से प्रगति की रिपोर्ट नहीं करेगा - मैं इसके लिए एक मार्की प्रगति पट्टी का उपयोग करूंगा।

अपने यूआई को अवरुद्ध करने से EndExecuteNonQuery से बचने के लिए (आप इसे कैसे संभालेंगे इसके आधार पर), आपको पृष्ठभूमि थ्रेड की आवश्यकता होगी। यदि आप इसका उपयोग करते हैं तो आप BeginXXXEndXXX विधियों का भी उपयोग नहीं कर सकते हैं और इसे पृष्ठभूमि थ्रेड पर सिंक्रनाइज़ कर सकते हैं - BackgroundWorker इसके लिए सबसे अच्छा है।

बजाय EndXXX पर अवरुद्ध, यूआई में एक पृष्ठभूमि धागा का उपयोग कर आप एक कॉलबैक रजिस्टर और जिसके परिणामस्वरूप घटना को संभालने के लिए की आवश्यकता होगी से बचने के लिए (इस इवेंट हैंडलर में EndXXX बुला, लेकिन यह तुरंत वापस आ जाएगी)।

अद्यतन: एक टिप्पणी के अनुसार, एसक्यूएल आदेश/कनेक्शन सामान में अतुल्यकालिक कॉल के लिए, आप कनेक्शन स्ट्रिंग में के रूप में ज्यादा निर्दिष्ट करना होगा:

http://www.connectionstrings.com/sql-server-2008

Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True; 

या कोड में कनेक्शन स्ट्रिंग बिल्डर का उपयोग करके:

builder.AsynchronousProcessing = true; 
+1

और तुम builder.AsynchronousProcessing = true सेट करने के लिए की जरूरत है; कनेक्शन स्ट्रिंग बिल्डर में। –

+0

@Quandary +1 अपडेट के लिए धन्यवाद - सूट के लिए संशोधित उत्तर। –