2009-03-30 13 views

उत्तर

3

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

using(OracleConnection connection = new OracleConnection(connectionString); ) 
{ 
    //Create a command object 
    using(OracleCommand command = new OracleCommand(sql, connection)) 
    { 
     using(OracleDataReader reader = cmd.ExecuteReader()) 
     { 
     } 

    } 
    // whatever... 
} 

मैं उपयोग "का उपयोग" सुई संकलक से पूछते हैं, आप कर रहे हैं से लगता है कि एक कोशिश ... अंत में ब्लॉक, और अंत में ब्लॉक में, यह आप के लिए डिस्पोजेबल वस्तु बंद हो जाएगा।

16
using (OracleConnection connection = new OracleConnection(connectionString)) 
{ 
    using (OracleCommand command = new OracleCommand(sql, connection)) 
    { 
     using (OracleDataReader reader = cmd.ExecuteReader()) 
     { 
     } 
    } 
} 

यदि यह आईडीस्पोज़ेबल लागू करता है, और यदि आप इसे बनाते हैं, तो इसे एक ब्लॉक में डाल दें।

+0

भीतरी usings वास्तव में जरूरत है, या 'कनेक्शन' काफी अच्छा के लिए एक है? –

+0

आपको अपने सभी आईडीस्पोज़ेबल ऑब्जेक्ट्स का निपटान करने की आवश्यकता है, इसलिए प्रत्येक उपयोग की आवश्यकता है। यदि आप नहीं करते हैं तो आप केवल कनेक्शन का निपटान करेंगे, और बच्चों को छोड़ दिया जाएगा। – Russ

+0

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

3

using यह सुनिश्चित करेगा कि आपका कनेक्शन बंद हो गया है। Dispose से पहले इसे बंद करने के लिए आप अपने कमांड की ExecuteReader विधि में CommandBehavior.CloseConnection में भी पास कर सकते हैं।

5

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

1 टिप्पणी की बात है, अगर आप घोंसले से बचना चाहते हैं, तो आप इस तरह एक ही कोड लिख सकते हैं:

using (OracleConnection connection = new OracleConnection(connectionString)) 
using (OracleCommand command = new OracleCommand(sql, connection)) 
using (OracleDataReader reader = cmd.ExecuteReader()) 
    { 
     // do something here 
    } 
+3

आप * इस तरह के कोड लिख सकते हैं, लेकिन IMHO आपको ** कभी ऐसा नहीं लिखना चाहिए। –

+1

क्या आप विनिर्देश दे सकते हैं क्यों? मैं अपने आप से बहुत काम करता हूं, (पसंद से नहीं), इसलिए मैं हमेशा बाहरी प्रतिक्रिया की तलाश में हूं। – Russ

+1

सहमत हुए। पहली नज़र में कोई समझ जाएगा कि किसी अन्य वस्तु में कौन सी वस्तु encapsulated है। अधिक कोष्ठक और इंडेंटेशन का प्रयोग करें। – wonea