2011-04-25 53 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(無論它們支持哪種)課程)。所以,答案不是。