2009-08-30 15 views
24

के लिए टाइमआउट सेटिंग मैं VSTS 2008 + ADO.Net + C# + .NET 3.5 + SQL Server 2008 का उपयोग कर रहा हूं। मैं क्लाइंट पक्ष पर ADO.Net का उपयोग कर रहा हूं ताकि स्टोर प्रक्रिया निष्पादित करने के लिए डेटाबेस सर्वर से कनेक्ट किया जा सके, फिर वापस आएं स्टोर प्रक्रिया से परिणाम।SQL सर्वर

मेरा कोड यहां है। मैं समय समाप्ति के बारे में दो मुद्दे हैं,

  1. मैं स्पष्ट रूप से डेटाबेस सर्वर से कनेक्शन के लिए किसी भी समय समाप्त संबंधित सेटिंग सेट नहीं करते हैं, वहाँ किसी भी टाइमआउट सेटिंग कर रहे हैं (उदाहरण के लिए कुछ डिफ़ॉल्ट राशि के लिए डेटाबेस सर्वर से कनेक्ट नहीं कर सकते हैं अगर समय के साथ, कुछ टाइमआउट अपवाद होगा?)?

  2. यदि मैं स्टोर प्रक्रिया के निष्पादन के लिए किसी टाइमआउट से संबंधित सेटिंग्स को स्पष्ट रूप से सेट नहीं करता हूं, तो क्या कोई टाइमआउट सेटिंग्स होती है (उदाहरण के लिए यदि सर्वर से परिणामों को कुछ डिफ़ॉल्ट समय के लिए ADO.Net क्लाइंट में पुनर्प्राप्त नहीं किया जा सकता है, कुछ टाइमआउट अपवाद होगा?)?

    using (SqlConnection currentConnection = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Trusted_Connection=true;Asynchronous Processing=true")) 
        { 
         // check current batch conut 
         currentConnection.Open(); 
         using (SqlCommand RetrieveOrderCommand = new SqlCommand()) 
         { 
          RetrieveOrderCommand.Connection = currentConnection; 
          RetrieveOrderCommand.CommandType = CommandType.StoredProcedure; 
          RetrieveOrderCommand.CommandText = "prc_GetOrders"; 
          RetrieveBatchCountCommand.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output; 
          RetrieveBatchCountCommand.ExecuteNonQuery(); 
          int rowCount = Convert.ToInt32(RetrieveOrderCommand.Parameters["@Count"].Value); 
         } 
        } 
    

उत्तर

13

हाँ, वहाँ समय समाप्ति के 2 प्रकार VBA में, .net आदि

  1. Connection timeout
  2. Command timeout

दोनों डिफ़ॉल्ट रूप सेट किया जा सकता है कि 30 सेकंड के लिए कर रहे

+0

Th के लिए तुरंत अपवाद फेंकता है एएनक्स जीबीएन!किस प्रकार के अपवाद को फेंक दिया जाएगा या दूसरे शब्दों में टाइमआउट मुद्दे को संभालने के लिए हमारे कोड में हमें किस प्रकार का अपवाद पकड़ना चाहिए? – George2

+2

एसएसएमएस में, मुझे "टाइमआउट समाप्त हो गया। ऑपरेशन पूरा होने से पहले समय समाप्ति अवधि समाप्त हो गई है या सर्वर प्रतिक्रिया नहीं दे रहा है।" आप कमांड टाइमआउट के लिए 40 सेकंड प्रतीक्षा और अपवाद को मजबूर करने के लिए WAITFOR DELAY '00: 00: 40 'का उपयोग करके परीक्षण कर सकते हैं। कनेक्शन टाइमआउट के लिए, आप एक सर्वर नाम बना सकते हैं और कनेक्ट करने का प्रयास कर सकते हैं। – gbn

+0

धन्यवाद, कमांड टाइमआउट के लिए, किस प्रकार के अपवाद को पकड़ा जाना चाहिए? – George2

40

1) कनेक्शन टाइमआउट:: यह आपके कनेक्शन स्ट्रिंग द्वारा नियंत्रित किया जाता:

Data Source=.;Initial Catalog=TestDB; 
    Trusted_Connection=true;Asynchronous Processing=true 

आप इस स्ट्रिंग के लिए एक Connect Timeout=120 जोड़ते हैं, तो आपके कनेक्शन की कोशिश करेंगेGBN पहले से ही उल्लेख किया है, वहाँ समय समाप्ति के दो प्रकार हैं खोले जाने के लिए 120 सेकंड के लिए और फिर aborts।

Data Source=.;Initial Catalog=TestDB; 
    Trusted_Connection=true;Asynchronous Processing=true; 
    Connect Timeout=120; 

2) कमान टाइमआउट: प्रत्येक आदेश के लिए, आप भी समय समाप्त निर्दिष्ट कर सकते हैं - ADO.NET आपकी क्वेरी बाहर रद्द करने से पहले समय की है कि राशि के लिए इंतजार करेंगे। के रूप में यह केवल पढ़ने के लिए यानी केवल "मिल" है

using (SqlCommand RetrieveOrderCommand = new SqlCommand()) 
    { 
     RetrieveOrderCommand.CommandTimeout = 150; 
    } 
+9

यह भी ध्यान देने योग्य नहीं हो सकता है कि कनेक्शन स्ट्रिंग पर 'कनेक्ट टाइमआउट' पैरामीटर भी SQLRransaction के लिए टाइम-आउट को नियंत्रित करता है। कॉमेट विधि –

+0

धन्यवाद मार्क, किस प्रकार का अपवाद फेंक दिया जाएगा या दूसरे शब्दों में किस प्रकार का अपवाद टाइमआउट मुद्दे को संभालने के लिए हमें अपने कोड में पकड़ना चाहिए? – George2

+0

धन्यवाद फिलिप, क्या आपका मतलब कनेक्शन टाइमआउट और कमांड टाइमआउट के अलावा, ट्रांज़ेक्शन टाइमआउट नामक एक तीसरा प्रकार का टाइमआउट है? – George2

0

SqlConnection कक्षा में नाम से एक संपत्ति है "connectiontimeout" .इस सीधे वांछित कनेक्शन टाइमआउट मान सेट करने के लिए नहीं किया जा सकता कार्यान्वित किया जाता है: आप SqlCommand वस्तु पर निर्दिष्ट करते हैं कि इस संपत्ति पर & "सेट" लागू नहीं किया गया है। इसलिए हमें कनेक्शन स्ट्रिंग में कीवर्ड "कनेक्शन टाइमआउट" का उपयोग करना होगा & वांछित मान सेट करें।

exi: "डेटा स्रोत = (स्थानीय), प्रारंभिक सूची = AdventureWorks; एकीकृत सुरक्षा = SSPI; कनेक्शन टाइमआउट = 30"; (30 30 सेकंड का मतलब है)

30 सेकंड की स्थापना के लिए दिए गए अधिक से अधिक समय है सर्वर से कनेक्शन (जैसे 172.160.0.2 या एडमिनिस्ट्रेटर \ SQLEXPRESS की तरह कुछ)। अगर यह तुरंत सर्वर से कनेक्शन स्थापित नहीं कर सका, तो यह 30 सेकंड तक प्रयास करेगा। अगर सर्वर मान्य है & डेटाबेस से कनेक्ट करने में सक्षम है & यदि डेटाबेस नाम या लॉगिन क्रेडेंशियल्स अमान्य हैं, तो यह टाइमआउट लागू नहीं होगा। यह अमान्य क्रेडेंटल या डेटाबेस