2011-04-25 20 views
7

Si emplea una cláusula de uso para deshacerse de una conexión, ¿hay otros elementos dentro de la cláusula que implementen IDisposable también eliminados automáticamente? De lo contrario, ¿cómo se las arregla para asegurarse de que todos los artículos IDisposable se desechen automáticamente?C# 'using' declaración pregunta

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

¿Por qué no utiliza otra forma de 'using':' using System.Data.SqlClient; '? – svick

Respuesta

7

Puede apilar las declaraciones como esta (para inicializar todos los objetos desechables desde el principio)

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

o puede utilizar anidado usando declaraciones para cada objeto desechable que necesita

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

No. Usted tendrá que llamar explícitamente Dispose en los que no se encuentran dentro de los parámetros de la declaración using.

3

Sólo un objeto creado en la cláusula de uso será eliminado. Si desea asegurarse de que la llamada para desechar se genere automáticamente para cada objeto desechable creado dentro del bloque de uso, deberá ajustar cada uno de ellos en una cláusula de uso (o puede simplemente llamar a disponer o cerrar, según lo que apoye, de curso). Entonces, la respuesta es no.