C# Language Uso de declaraciones y conexiones de base de datos


Ejemplo

La palabra clave using garantiza que el recurso definido dentro de la declaración solo exista dentro del alcance de la declaración. Cualquier recurso definido dentro de la declaración debe implementar la interfaz IDisposable .

Estos son increíblemente importantes cuando se trata de conexiones que implementan la interfaz IDisposable , ya que puede garantizar que las conexiones no solo se cierren correctamente, sino que sus recursos se liberen después de que la declaración de using esté fuera del alcance.

Clases de datos IDisposable comunes

Muchas de las siguientes son clases relacionadas con datos que implementan la interfaz IDisposable y son candidatos perfectos para una declaración de using :

  • SqlConnection , SqlCommand , SqlDataReader , etc.
  • OleDbConnection , OleDbCommand , OleDbDataReader , etc.
  • MySqlConnection , MySqlCommand , MySqlDbDataReader , etc.
  • DbContext

Todos estos se usan comúnmente para acceder a los datos a través de C # y se encontrarán comúnmente en las aplicaciones de creación de datos centradas. Se puede esperar que muchas otras clases que no se mencionan y que implementan las mismas FooConnection , FooCommand , FooDataReader se comporten de la misma manera.

Patrón de acceso común para conexiones ADO.NET

Un patrón común que se puede usar al acceder a sus datos a través de una conexión ADO.NET puede tener el siguiente aspecto:

// This scopes the connection (your specific class may vary)
using(var connection = new SqlConnection("{your-connection-string}")
{
    // Build your query
    var query = "SELECT * FROM YourTable WHERE Property = @property");
    // Scope your command to execute
    using(var command = new SqlCommand(query, connection))
    {
         // Open your connection
         connection.Open();

         // Add your parameters here if necessary

         // Execute your query as a reader (again scoped with a using statement)
         using(var reader = command.ExecuteReader())
         {
               // Iterate through your results here
         }
    }
}

O si solo estuvieras realizando una actualización simple y no necesitaras un lector, se aplicaría el mismo concepto básico:

using(var connection = new SqlConnection("{your-connection-string}"))
{
     var query = "UPDATE YourTable SET Property = Value WHERE Foo = @foo";
     using(var command = new SqlCommand(query,connection))
     {
          connection.Open();
          
          // Add parameters here
          
          // Perform your update
          command.ExecuteNonQuery();
     }
}

Uso de declaraciones con DataContexts

Muchos ORM, como Entity Framework, exponen las clases de abstracción que se utilizan para interactuar con las bases de datos subyacentes en forma de clases como DbContext . Estos contextos generalmente implementan también la interfaz IDisposable y deberían aprovechar esto mediante el using declaraciones cuando sea posible:

using(var context = new YourDbContext())
{
      // Access your context and perform your query
      var data = context.Widgets.ToList();
}