SqlCommand.CommandTimeout और SqlConnection.ConnectionTimeout के बीच क्या अंतर है?


88

वहाँ के बीच कोई अंतर है SqlCommand.CommandTimeoutऔर SqlConnection.ConnectionTimeout.NET में?


क्या यह MS SQL सर्वर के लिए विशिष्ट है?
5

जवाबों:


127

हाँ। CommandTimeoutएक एकल आदेश को पूरा होने में कितना समय लग सकता है। ConnectionTimeoutशुरू होने के लिए सर्वर से कनेक्शन स्थापित करने में कितना समय लग सकता है।

उदाहरण के लिए, आप अपेक्षाकृत लंबे समय तक चलने वाले प्रश्नों का निष्पादन कर सकते हैं - उन्हें पूरा करने में 10 मिनट लगना पूरी तरह से ठीक है, लेकिन अगर इसे शुरू करने के लिए कनेक्शन बनाने में 10 मिनट लगते हैं, तो आपको पता चलेगा कि कुछ गलत था।


5
तर्क के लिए, मान लें कि मेरे पास **! ** & # क्यू @ है? क्वेरी जो चलाने में 32 सेकंड लेती है। अगर मैं SqlCommand.CommandTimeout = 40 सेट करता हूं, लेकिन SqlConnection.ConnectionTimeout को उसके डिफ़ॉल्ट (संभवतः 30) पर छोड़ दें, तो क्या कनेक्शन टाइमआउट होगा? दूसरे शब्दों में, क्या मुझे दोनों संपत्तियों को सेट करना है? ऐसा लगता है कि आप "नहीं" कह रहे हैं, लेकिन मैं SqlConnection.ConnectionTimeout प्रॉपर्टी के बारे में भूल गया होगा और सवाल करना शुरू कर दिया था कि क्या कमांडटाइमआउट सेट करना सब कुछ है जो मुझे इसकी आवश्यकता है।
flipdoubt

29
flipdoubt - कमांडटाइमआउट क्वेरी को प्रभावित करेगा, ConnectionTimout नहीं होगा। ConnectionTimout पियरफॉर्म प्रश्नों के कनेक्शन के लिए टाइमआउट नहीं है - पहली बार में डेटाबेस से जुड़ने के लिए कनेक्शन का टाइमआउट है।
रॉबिन बेनेट

1
@JonSkeet CommandTimeout और ConnectionTimeout करते हैं, दोनों एक ही समान अपवाद उत्पन्न करते हैं? या अलग-अलग अपवाद?
यासर शेख

1
@ Yasser: मुझे नहीं पता, मुझे डर है।
जॉन स्कीट

6
ध्यान रखें कि CommandTimeout केवल उसी बिंदु तक लागू होता है जब तक कि पहली पंक्ति SQL सर्वर से क्लाइंट कोड में वापस नहीं आती है। उदाहरण के लिए, यदि आपके पास एक ऐसी क्वेरी है जो पहली पंक्ति को 30 सेकंड के भीतर लौटाती है, लेकिन पूरी पंक्तियाँ लौटने में घंटों का समय लेती हैं, तो 30 सेकंड के लिए टाइमआउट सेट करने से क्वेरी का समय समाप्त नहीं होगा और क्वेरी घंटों तक चलेगी। यह मुख्य रूप से मामला है यदि आपके पास अपने निष्पादन योजना के एलएचएस पर अवरुद्ध ऑपरेटर (जैसे कि ऑर्डर द्वारा) नहीं है। (पोस्टिंग क्योंकि मैंने 2 दिन यह डिबगिंग में बिताए और इस विषय पर कोई अन्य संदर्भ नहीं)
डेव

28

SqlCommand.CommandTimeout= अपने SQL क्वेरी के लिए समय सीमा। मतलब, कितना समय एक (जैसे: SELECT, UPDATE) क्वेरी इसके निष्पादन के लिए ले जा सकते हैं। यदि यह अधिक SqlCommand.CommandTimeoutहो जाता है, तो यह निष्पादन को रोक देता है। एक कमांड टाइमआउट त्रुटि उत्पन्न होगी।

SqlConnection.ConnectionTimeout= आपके कनेक्शन के लिए समय सीमा। मतलब, आपका कनेक्शन ऑब्जेक्ट कितना समय कनेक्ट करने का प्रयास कर सकता है। यदि यह निर्दिष्ट समय से अधिक है, तो यह कनेक्ट करना बंद कर देता है। एक कनेक्शन टाइमआउट त्रुटि उत्पन्न होगी।


11

ConnectionTimeoutनिर्दिष्ट अवधि जब करने का प्रयास कर बाहर समय से पहले प्रतीक्षा करने के लिए खोलने के लिए एक SqlConnection। यह प्रासंगिक हैConnection.Open() कमांड के ।

जबकि

SqlCommand.CommandTimeoutएक SqlCommand की समयावधि समाप्त होने से पहले प्रतीक्षा करने की अवधि निर्दिष्ट की। ऐसा तब होता है जब कनेक्शन खोला ExecuteXXXजाता है और कमांड ऑब्जेक्ट पर एक विधि को बुलाया जाता है।


8

अतिरिक्त जानकारी

डिफ़ॉल्ट मान CommandTimeout30 सेकंड है। शून्य (0) कोई सीमा नहीं दर्शाता है। आप सेट कर सकते हैंCommandTimeout केवल कोडिंग में मान ।

डिफ़ॉल्ट मान ConnectiontTimeout15 सेकंड है। शून्य (0) की कोई सीमा नहीं है। शून्य से कम मूल्य (माइनस मान) मिलेगा ArgumentException। आप ConnectionTimeoutकोडिंग और कॉन्फ़िगरेशन फ़ाइल दोनों में मान सेट कर सकते हैं ।


0
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms

2
यह एक 3 प्रकार का टाइमआउट है। विषय स्वामी से उन दो में से एक के बारे में नहीं पूछता। और सवाल का जवाब नहीं देता। मैं इसे -1 नहीं करूंगा, क्योंकि मुझे नहीं पता कि संपादन से पहले क्या सवाल था।
सेबा ताथ

0

कमांड टाइमआउट के बारे में त्वरित ध्यान दें, क्योंकि यह कनेक्शन और कमांड ऑब्जेक्ट दोनों की एक संपत्ति है ...

किसी कनेक्शन ऑब्जेक्ट पर कमांडटाइमआउट सेटिंग का उसी कनेक्शन पर कमांड ऑब्जेक्ट पर कमांडटाइमआउट सेटिंग पर कोई प्रभाव नहीं पड़ता है; वह है, कमांड ऑब्जेक्ट की कमांड टाइमआउट प्रॉपर्टी कनेक्शन ऑब्जेक्ट के कमांडटाइमआउट वैल्यू को इनहेरिट नहीं करती है।

तो एक कनेक्शन ऑब्जेक्ट पर कमांडटाइमआउट सेटिंग केवल कनेक्शन ऑब्जेक्ट के तहत निष्पादित कमांड को प्रभावित करती है (कमांड ऑब्जेक्ट का उपयोग किए बिना)।

उदाहरण के लिए जब आप किसी Stored Proc से जुड़ रहे हैं और कमांड ऑब्जेक्ट में पैरामीटर जोड़ रहे हैं, और एक कनेक्शन ऑब्जेक्ट के कनेक्शन का उपयोग करके कमांड ऑब्जेक्ट को निष्पादित कर रहे हैं, तो आपको कमांड ऑब्जेक्ट पर CommandTimeout सेट करने की आवश्यकता होगी और कनेक्शन ऑब्जेक्ट पर ConnectionTimeout दोनों को ओवरराइड करने के लिए चूक। कनेक्शन ऑब्जेक्ट पर कमांडटाइमआउट सेट करना कमांड ऑब्जेक्ट कमांड के लिए डिफ़ॉल्ट टाइमआउट को ओवरराइड नहीं करेगा।

https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/en-us / एसक्यूएल / हलचल / संदर्भ / हलचल-api / connectiontimeout-संपत्ति-हलचल? = एसक्यूएल सर्वर-ver15 देखने

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