2013-06-18 4 views
7

मैंने देखा है कि System.Data.SQLite में SQLiteConnection वस्तु इसी तरह के दो तरीकों का मालिक:कनेक्शन के बीच क्या अंतर है। बंद करें() और कनेक्शन। Disis()?

  • Close()
  • Dispose()

SQLiteDataReader वस्तु के लिए एक ही।

क्या अंतर है?

+3

शायद यह मदद करता है: http://stackoverflow.com/questions/61092/close-and-dispose-which-to-call – Micha

+0

धन्यवाद, मुझे यह पोस्ट नहीं मिला! – Epoc

उत्तर

17

Dispose कनेक्शन बंद कर देता है अगर यह बंद नहीं किया गया है, लेकिन Close पर कॉल करते समय, आप फिर से कनेक्शन को फिर से खोल सकते हैं। जब कनेक्शन का निपटारा किया जाता है तो यह संभव नहीं है।

सामान्य तौर पर, Close फोन नहीं है, लेकिन बस परोक्ष निपटान के फोन एक using ब्लॉक में एक कनेक्शन के निर्माण लपेटकर द्वारा:

using (var connection = new SqlConnection(...)) 
{ 
    // use connection here. 
} // connection gets closed and disposed here. 
+0

[स्रोत] (http://system.data.sqlite.org/index.html/artifact/31b823606b81d72d120bdd8dca8de8421b9abb16) पर एक नज़र डालें ... ... दिखा सकता है कि 'निपटान()' कॉल 'बंद करें() 'आंतरिक रूप से। – Arran

+0

उत्तर के लिए धन्यवाद (डुप्लिकेट के लिए खेद है) – Epoc

+0

@ स्टीवन मैंने यह कहा था कि यह था? – Arran

5

Connection.Close() बस सर्वर से कनेक्शन बंद हो जाएगा कनेक्शन स्ट्रिंग में परिभाषित के रूप में। इस बिंदु के बाद कनेक्शन का उपयोग/पुनः खोला जा सकता है।

Connection.Dispose() पूरी तरह से साफ हो जाएगा, कनेक्शन को फिर से उपयोग करने से रोकने वाले सभी अप्रबंधित संसाधनों को हटा देगा। एक बार निपटान करने के बाद आपको ऑब्जेक्ट का उपयोग करने की कोशिश नहीं करनी चाहिए। Dispose(), के भीतर बंद करें() `सभी को निश्चित रूप से भी बुलाया जाएगा।

मैं तो यदि संभव हो तो जैसे using सिंटेक्स के उपयोग की सलाह देते हैं, यह सुनिश्चित करने के चीजों को सही ढंग से साफ हो जाने:

using(SqlLiteConnection conn = new SqlLiteConnection(...)) 
{ 
    // Do work here 
} 

यह स्वचालित रूप से, आप के लिए कनेक्शन के निपटान होगा एक अपवाद की परवाह किए बिना फेंक दिया जा रहा है।

+2

एक सूक्ष्म अंतर 'बंद' उस कनेक्शन पर 'GC.SuppressFinalize' विधि को कॉल नहीं करेगा, जबकि 'निपटान' उस विधि को कॉल करता है। कनेक्शन का निपटारा नहीं करने से कनेक्शन ऑब्जेक्ट को ज़्यादा लंबे समय तक जीवित रखा जाएगा। इसका कनेक्शन पूल पर कोई प्रभाव नहीं पड़ता है, लेकिन स्मृति पर है। अंतर- 'SqlConnection' के मामले में- हालांकि उपेक्षित होगा। – Steven

+0

धन्यवाद, यह अब मेरे लिए अधिक स्पष्ट है (डुप्लिकेट के लिए खेद है) – Epoc

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