2009-03-25 12 views
6

मैं अपने आवेदन में एक ही सर्वर से डेटा खींचने के लिए कई प्रश्नों का उपयोग कर रहा हूं। मुद्दा यह है कि जब भी मेरी कोई नई क्वेरी हो तो मुझे एक नया कनेक्शन खोलना होगा।एकाधिक प्रश्नों को निष्पादित करते समय मैं कनेक्शन को कैसे खोल सकता हूं?

यह भी संभव है:

  • ओपन कनेक्शन
  • भागो क्वेरी
  • पुल परिणाम
  • भागो किसी अन्य क्वेरी
  • एक और परिणाम खींचो
  • भागो अंतिम क्वेरी
  • एक और परिणाम खींचें
  • कनेक्शन बंद करें।

उत्तर

17

यद्यपि आप तक यह पता नहीं हो सकता है, आप इसे सही ढंग से कर रहे हैं।

कनेक्शन खुला है, आपकी क्वेरी करते हैं, उसे बंद करें। अधिमानतः एक using ब्लॉक या try/finally का उपयोग कर।

यह बहुत अधिक ओवरहेड की तरह लग सकता है, लेकिन SQL सर्वर के लिए .NET Framework डेटा प्रदाता में कनेक्शन पूल वास्तव में आपके लिए इसे अनुकूलित करेगा।

वास्तव में कनेक्शन बंद करने की अनुशंसा की जाती है।

यह अनुशंसा की जाती है कि आप हमेशा कनेक्शन बंद जब आप क्रम में यह काम समाप्त करने कनेक्शन के लिए पूल को लौटा दी गई हैं: यहाँ प्रलेखन से एक उद्धरण है। यह का उपयोग करके किया जा सकता है कनेक्शन ऑब्जेक्ट के बंद या विधियों का उपयोग करें। कनेक्शन है कि स्पष्ट रूप से बंद कर दिया नहीं कर रहे हैं नहीं जोड़ा जा सकता है या पूल में लौट आए। उदाहरण, क्षेत्र से बाहर चला गया है कि लेकिन यह है कि स्पष्ट रूप से बंद कर दिया केवल कनेक्शन पूल को लौटा दी जाएगी नहीं किया गया है अगर अधिकतम पूल आकार तक पहुँच गया है और कनेक्शन अभी भी मान्य है एक कनेक्शन के लिए।

यहाँ कुछ कोड है कि करता है का एक उदाहरण है यह:

try { 
    conn.Open(); 
    // Perform query here 
} finally { 
    conn.Close(); 
} 

संदर्भ के लिए:

http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.71).aspx

2

यदि आप एक ही कनेक्शन स्ट्रिंग के साथ एएसपी.नेट का उपयोग कर रहे हैं तो आप एक पूल कनेक्शन का उपयोग करेंगे जो शारीरिक रूप से बंद नहीं हो सकता है, इसलिए आप हमेशा उपलब्ध खुले कनेक्शन का उपयोग करेंगे।

0

संक्षिप्त उत्तर: हां। अधिकांश डेटा प्रदाताओं के साथ यह संभव होना चाहिए।

लंबा उत्तर: यह इस बात पर निर्भर करता है कि आप अपने डेटा एक्सेस के लिए क्या उपयोग कर रहे हैं। हालांकि, आपको शायद इसके बारे में चिंता करने की आवश्यकता नहीं है। कई डेटा प्रदाता ढांचे में कनेक्शन पूलिंग का निर्माण होता है, इसलिए बाद में कनेक्शन निर्माण/खोलना "वास्तव में" कनेक्शन खोलना नहीं चाहिए।

0

ज़रूर, तुम एक SqlConnection ऑब्जेक्ट तुम सिर्फ कर सकते हैं उपयोग कर रहे हैं इस तरह कुछ:

connection.Open(); 
cmd.ExecuteReader(); // or any other form of getting the data 
cmd2.ExecuteReader(); 
. 
. 
. 
. 
connection.Close(); 

मैं भी जोड़ना चाहूंगा, अगर आप अपने प्रश्नों के लिए कुछ SqlDataAdapters का उपयोग कर रहे हैं, हालांकि आपको सामान्य रूप से कनेक्शन खोलने की आवश्यकता नहीं है, अगर आप स्पष्ट रूप से कनेक्शन कॉल करते हैं। खोलें() तो यह नहीं होगा अपने लिए कनेक्शन बंद करें, जिससे आप केवल एक कनेक्शन के साथ कई प्रश्न निष्पादित कर सकते हैं।

1

यह बहुत संभव है। मान लें कि आप कनेक्शन और डेटा रीडर के बारे में बात कर रहे हैं। अगर आपको हर बार एक अलग कनेक्शन बनाना है, तो ऐसा लगता है कि कुछ गलत हो रहा है।

कोई भी कोड देखे बिना, मुझे लगता है कि आप DataReader को खोल रहे हैं। यह एक बहुत बड़ी भूल है। डिफ़ॉल्ट रूप से DataReaders पूरी तरह से कनेक्शन का उपभोग करते हैं और इसे छोड़कर छोड़कर लीक का नेतृत्व कर सकते हैं। DataReader को बंद करें, फिर दूसरा निष्पादित करें। मैं एक उपयोग ब्लॉक में DataReader लपेटने की सिफारिश करेंगे।

रोब

+0

अधिभार ExecuteReader (SqlCommand, ConnectionBehavior) में ConnectionBehavior.CloseConnection गणन मान का उपयोग कनेक्शन पूल में वापस जारी करने के लिए मजबूर करने के लिए पाठक जब पाठक बंद –

0

यदि आप कनेक्शन खोलने के लिए सी # का उपयोग कर रहे हैं। कथन का उपयोग करके उपयोग करने से कुछ संसाधन निकालने के बावजूद संसाधन/कनेक्शन को साफ करने में मदद मिलेगी।

using (SqlConnection connection = 
       new SqlConnection(connectionString) 
      { 
       connection.Open(); 
       //issue command 
      } 

और इस पढ़ें:

http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.71).aspx, आप "कनेक्शन स्ट्रिंग कीवर्ड के साथ पूलिंग कनेक्शन को नियंत्रित करना" कर सकते हैं, और इस प्रणाली आप के लिए पूलिंग को संभाल लेंगे।

संबंधित मुद्दे

 संबंधित मुद्दे