c# - SQL Server2008: BeginExecuteNonQuery / EndExecuteNonQuery Problem -
मेरे पास एक संग्रहीत कार्यविधि है, जो एक विशिष्ट डेटाबेस का बैकअप लिखता है मैं इस सपा को सी # / विंडोज फॉर्म में एक asynchrounously आवेदन में कॉल करता हूँ यहां कोड स्निप किया गया है:
IAsyncResult परिणाम = कमांड। BeginExecuteNonQuery (); जबकि (! परिणाम। आईपी समाहित) {System.Threading.Thread.Sleep (1000); ...} command.EndExecuteNonQuery (परिणाम));
कुछ समय के बाद प्रोग्राम लूप छोड़ देता है, क्योंकि IsCompleted = true और EndExecuteNonQuery कॉल करता है समस्या यह है कि, नौकरी अभी भी व्यस्त है और एंडएक्सेक्यूट नोनिका अवरुद्ध है! कुछ मिनटों के बाद यह एक सर्वर समयबाह्य का कारण बनता है ऐसा लगता है कि IsCompleted मान क्रमशः अनुरूप नहीं है, जो कि IsCompleted के साथ गलत है? मैं कैसे प्राप्त कर सकता हूं कि मेरा कार्यक्रम "वास्तविक जॉब स्टेटस"
सुनिश्चित करें कि आपकी संग्रहीत कार्यविधि कुछ भी प्रिंट नहीं करती है और इसकी कोई गणना रिपोर्ट नहीं है ( SET NOCOUNT ON
)। एसिंक टीडीएस कॉल सर्वर द्वारा भेजे गए बहुत पहले पैकेट पर कॉल करता है, लेकिन यह पैकेट इंटरमीडिएट परिणाम (जैसा कि 1 row updated
में हो सकता है) हो सकता है और लंबे समय से पहले हो सकता है वास्तविक पूर्णता क्या यह चूसना है? हाँ। क्या आप इसके बारे में कुछ भी कर सकते हैं? नहीं।
एक पक्ष नोट के रूप में, यह केवल बिल्लिनएक्सेक्यूट (...) को कॉलबैक पास करने के लिए असीम रूप से अधिक कुशल है:
// सेट फॉर्म की स्थिति को ' निष्पादन ', // उदा। बटन। सक्षम = गलत; लेबल। पाठ = 'निष्पादित'; Command.BeginExecuteNonQuery (asyncstate) = & gt; {try.edExecuteNotQuery ();} कैच (SqlException ex) {...} // फॉर्म के राज्य को 'रेडी' को फिर से सेट करें ((=) = & gt; {// उदा। बटन। सक्षम = सच; लेबल। पाठ = 'तैयार';}}
Comments
Post a Comment