2011-04-25 54 views
7

如果您使用using子句来处置连接,那么实现IDisposable的子句中的其他项也会自动处理?如果不是,你如何处理确保所有IDisposable项目都自动处理?C#'使用'语句问题

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

为什么不使用另一种'using'形式:'使用System.Data.SqlClient;'? – svick 2011-04-25 02:02:37

回答

7

可以叠加像这样的语句(在早期初始化所有可支配的对象)

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

,或者您可以使用报表,你需要

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

号您必须显式调用不属于using语句的参数里面的那些Dispose

3

只有一个对象的每个一次性对象使用嵌套在使用条款中创建的内容将被丢弃。如果你想确保调用dispose是为在using块内创建的每个可处理对象自动生成的,你需要将它们中的每一个都包含在using子句中(或者你可以调用dispose或close(无论它们支持哪种)课程)。所以,答案不是。