2011-04-25 18 views
7

यदि आप किसी कनेक्शन का निपटान करने के लिए उपयोग करने वाले खंड को नियोजित करते हैं, तो IDISposable को लागू करने वाले क्लॉज के भीतर अन्य आइटम भी स्वचालित रूप से निपटाए जाते हैं? यदि नहीं, तो आप यह सुनिश्चित करने के लिए कैसे संभालेंगे कि सभी आईडीस्पोज़ेबल आइटम स्वचालित रूप से निपटाए जाते हैं?सी # 'उपयोग' कथन प्रश्न

public static DataTable ReturnDataTable(
    string ConnectionString, string CommandTextString, CommandType CommandType, 
    int CommandTimeout, List<System.Data.SqlClient.SqlParameter> ParameterList = null) 
{ 
    using (System.Data.SqlClient.SqlConnection Connection = 
     new System.Data.SqlClient.SqlConnection()) 
    { 
     Connection.ConnectionString = ConnectionString; 

     System.Data.SqlClient.SqlCommand Command = 
      new System.Data.SqlClient.SqlCommand(); 
     Command.Connection = Connection; 
     Command.CommandText = CommandTextString; 
     Command.CommandType = CommandType; 
     Command.CommandTimeout = CommandTimeout; 

     if (ParameterList != null) 
     { 
      if (ParameterList.Count > 0) 
      { 
       foreach (SqlParameter parameter in ParameterList) 
       { 
        Command.Parameters.AddWithValue(
         parameter.ParameterName, parameter.Value); 
       } 
      } 
     } 

     System.Data.DataTable DataTable = new System.Data.DataTable(); 

     System.Data.SqlClient.SqlDataAdapter DataAdapter = 
      new System.Data.SqlClient.SqlDataAdapter(); 
     DataAdapter.SelectCommand = Command; 
     DataAdapter.Fill(DataTable); 

     return DataTable; 
    } 
} 
+0

आप सिस्टम का उपयोग करते हुए 'उपयोग' के दूसरे रूप का उपयोग क्यों नहीं करते: 'System.Data.SqlClient; '? – svick

उत्तर

7

आप इस तरह के बयानों ढेर कर सकते हैं (सभी डिस्पोजेबल वस्तुओं पर जल्दी प्रारंभ करने में)

using (...) 
using (...) 
{ 
    ... 
} 

या आप प्रत्येक डिस्पोजेबल वस्तु आप

using (...) 
{ 
    using (...) { ... } 
    using (...) { ... } 
} 
2

नहीं, आप स्पष्ट रूप से जो कि using बयान के मापदंडों के भीतर नहीं हैं पर Dispose फोन करना होगा।

3

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

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