2010-01-07 10 views
5

हर अपने आवेदन डेटाबेस के लिए एक खुला कनेक्शन है, तो कुछ इस तरह एक संग्रहीत प्रक्रिया यह है चलाता है:चेक वहाँ asp.net/c#

using (DbBase conn = new DbBase()) 
{  
    //call sproc 
} 

DBBase() एक LINQ DataContext के सिलसिले को खोलता है।

क्या मैं जानना चाहता था, अगर यह पता करने का एक तरीका है कि कोई कनेक्शन पहले ही खोला गया है, और इसका उपयोग खोलने के बजाय करें।

ClientDB = new ClientDBDataContext([ConnectionString from web.config]); 

धन्यवाद

उत्तर

5

आप किसी भी DBConnection वस्तु की State संपत्ति पर देखने में कनेक्शनों की संख्या को बदलने को देखने के लिए चाहते हो सकता है, और अगर यह open, closed, connecting, executing, fetching or broken है यह आपको बता देंगे।

using{ } कथन का उपयोग करके, आप गारंटी देते हैं कि ऑब्जेक्ट दायरे से बाहर होने पर कनेक्शन बंद हो रहा है।

+0

यह सबसे अच्छा जवाब है ... –

+1

मैं यह जवाब देना चाहूंगा कि() वास्तव में कनेक्शन को बंद नहीं करता है, लेकिन इसे पुन: उपयोग करने के लिए इसे वापस इंटियो ADO.Net कनेक्शन पूल जारी करता है ... –

+0

@ चार्ल्स - बंद विधि विशेष रूप से डीबीकनेक्शन ऑब्जेक्ट्स का निपटान() के दौरान बुलाया जाता है। एडीओ.Net पूलिंग जानकारी बनाए रखेगा, लेकिन जहां तक ​​ग्राहक का संबंध है, कनेक्शन बंद है, जो एक अच्छी बात है। – womp

1

मैं इसके बारे में चिंता नहीं करता (जब तक आप इसे या कुछ और प्रोफाइल है): यह सत्यापन DbBase() निर्माता है कि इस तरह से चला जाता है के अंदर किया जाना चाहिए। कनेक्शन पूलिंग के साथ, एक नया कनेक्शन खोलना बहुत सस्ता हो सकता है। यदि कोई समस्या है, तो आप पूल (http://www.15seconds.com/issue/040830.htm)

+0

आपके तेज़ उत्तर के लिए धन्यवाद। मैं कनेक्शन पूलिंग के बारे में सहमत हूं, लेकिन मैं जानना चाहता हूं कि वैसे भी कोई तरीका है या नहीं। –

+0

उस मामले में गर्भ का जवाब सबसे सही है। –

2

using का उपयोग करने के बारे में अच्छी बात यह है कि यह ऐसी चीज है जिसकी आपको चिंता करने की आवश्यकता नहीं है।

+0

मैंने इस कारण से DV'd मुझे विश्वास है कि इस विषय में ज्ञान की कमी के ओपी को संबोधित करने के लिए अपर्याप्त है। सिर्फ "चिंता न करें, 'का उपयोग करें,' सभी का समाधान होगा ... 'सवाल का जवाब नहीं देता है या ओपीओ में कनेक्शन को जोड़ता है, जो इस मुद्दे के दिल में एडीओ.Net कनेक्शन पूलिंग के बारे में समझता है। –

+1

@cb: Womp का जवाब सबसे अच्छा है और मैंने इसे इंगित करने के लिए इसे ऊपर उठाया है। अगर मैंने इसे देखा होता, तो मैंने अपना त्वरित और गंदा जवाब नहीं पोस्ट किया होता। – Nick

+0

मैंने सही उत्तर बदल दिया है, चिंता न करें। मुझे वास्तव में पूलिंग के बारे में पता है और आप जवाब जानते थे, जहां तक ​​मुझे पता है, लेकिन मुझे यह मानना ​​है कि गर्भ अधिक पूर्ण है। धन्यवाद। –

1

मुझे डीबेस के बारे में पता नहीं है, लेकिन एसक्यूएल सर्वर प्रदाता कम से कम आपके लिए यह पहले से ही करता है। जहां संभव हो वहां मौजूदा कनेक्शन का पुन: उपयोग करने के लिए यह पृष्ठभूमि में कनेक्शन पूलिंग का उपयोग करता है।

+0

डीबीबेस एक वर्ग है जिसे मैंने बनाया है हमारे पास परियोजना में मौजूद डेटाकॉन्टेक्स का प्रबंधन करें। धन्यवाद –

1

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