2011-09-12 4 views
7

SqlDataAdapter फ़ंक्शन के बाद SqlConnection बंद करें या क्या मुझे इसे बंद करने की आवश्यकता है?क्या Fq() फ़ंक्शन के बाद SqlDataAdapter SqlConnection को बंद करता है?

string cnStr = @"Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm"; 
cn = new SqlConnection(cnStr); 
SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn); 
SqlDataAdapter adapter = new SqlDataAdapter(cmd); 

DataSet ds = new DataSet(); 
adapter.Fill(ds); 

cn.Close() // ???????? 

Console.WriteLine(ds.Tables[0].Rows.Count); 
Console.WriteLine(cn.State); 

उत्तर

14

अपने वर्तमान उपयोग में, यह आप के लिए बंद हो जाएगा:

IDbConnection बंद है, तो इससे पहले कि भरण कहा जाता है, यह डेटा पुनः प्राप्त करने के लिए खोला जाता है और तो बंद कर दिया। यदि भरने से पहले कनेक्शन खुला है, तो खुला रहता है।

http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx

मुझे लगता है कि यह हमेशा बेहतर है स्पष्ट रूप से एक using बयान के साथ अपने आप को इसके लिए पूरा करने के लिए:

using (SqlConnection conn = new SqlConnection("")) 
{ 
    conn.Open(); 

    // Do Stuff. 

} // Closes here on dispose. 

इस बार अधिक पठनीय है और अंदरूनी कामकाज को समझने के लोगों पर निर्भर नहीं करता SqlDataAdapter.Fill, बस using कथन और कनेक्शन।

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

string cnStr = "Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm"; 
    DataSet ds = new DataSet(); 

    using (SqlConnection cn = new SqlConnection(cnStr)) 
    using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn)) 
    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 
    { 
     conn.Open(); 
     adapter.Fill(ds);  
    } 
+0

लेकिन अगर मैं वास्तव में समारोह – Wachburn

+1

@Wachburn के निकास से पहले जो कुछ भी बंद कर दिया है राज्य cn निर्माण का उपयोग किए बिना इस कोड लिखने, और परामर्श MSDN इस पुष्टि करता है। क्षमा करें, मैंने इसे पहली बार पकड़ नहीं लिया। –

+0

यदि आदेश सफलतापूर्वक निष्पादित किया गया है, तो यह आपके लिए बंद कर देता है, लेकिन अपवाद मामले में क्या है? (डेडलॉक, टाइमआउट, इत्यादि) –

4

मैं तुम्हें कनेक्शन बंद करने के लिए आप खुद क्या करना

सबसे अच्छा तरीका है द्वारा की जरूरत जानते हैं

using(SqlConnection con = new SqlConnection()) 
{ 
    // you code 
} 

इस है:

व्यक्तिगत रूप से, मैं कुछ इस तरह लिखते हैं आपको स्वचालित रूप से कनेक्शन बंद कर देगा

सी # में ब्लॉक का उपयोग करके व्यवहार करना बहुत आसान है डिस्पोजेबल वस्तुओं के साथ। डिस्पोजेबल ऑब्जेक्ट्स वे ऑब्जेक्ट्स हैं जो निपटान के लिए बुलाए जाने वाले संसाधनों को स्पष्ट रूप से रिलीज़ कर सकती हैं। जैसा कि हम जानते हैं। नेट कचरा संग्रह गैर-निर्धारक है, इसलिए आप भविष्यवाणी नहीं कर सकते कि ऑब्जेक्ट कचरा कब होगा।

विवरण में अधिक के लिए यह पोस्ट पढ़ें: understanding ‘using’ block in C#

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