C# Language Connexions ADO.NET


Exemple

Les connexions ADO.NET sont l'un des moyens les plus simples de se connecter à une base de données à partir d'une application C #. Ils reposent sur l'utilisation d'un fournisseur et d'une chaîne de connexion qui pointe vers votre base de données pour effectuer des requêtes.

Classes communes de fournisseur de données

La plupart des classes suivantes sont couramment utilisées pour interroger les bases de données et leurs espaces de noms associés:

  • SqlConnection , SqlCommand , SqlDataReader de System.Data.SqlClient
  • OleDbConnection , OleDbCommand , OleDbDataReader partir de System.Data.OleDb
  • MySqlConnection , MySqlCommand , MySqlDbDataReader partir de MySql.Data

Tous ces éléments sont couramment utilisés pour accéder aux données via C # et seront couramment rencontrés lors de la création d'applications centrées sur les données. De nombreuses autres classes non mentionnées qui implémentent les mêmes FooConnection , FooCommand , FooDataReader peuvent se comporter de la même manière.

Modèle d'accès commun pour les connexions ADO.NET

Un modèle commun pouvant être utilisé pour accéder à vos données via une connexion ADO.NET peut se présenter comme suit:

// 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
         }
    }
}

Ou si vous réalisiez une simple mise à jour et que vous n’avez pas besoin de lecteur, le même concept de base s’appliquerait:

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();
     }
}

Vous pouvez même programmer sur un ensemble d'interfaces communes et ne pas avoir à vous soucier des classes spécifiques au fournisseur. Les interfaces principales fournies par ADO.NET sont:

  • IDbConnection - pour gérer les connexions aux bases de données
  • IDbCommand - pour exécuter des commandes SQL
  • IDbTransaction - pour gérer les transactions
  • IDataReader - pour lire les données renvoyées par une commande
  • IDataAdapter - pour canaliser des données vers et depuis des ensembles de données
var connectionString = "{your-connection-string}";
var providerName = "{System.Data.SqlClient}"; //for Oracle use "Oracle.ManagedDataAccess.Client"
//most likely you will get the above two from ConnectionStringSettings object

var factory = DbProviderFactories.GetFactory(providerName);

using(var connection = new factory.CreateConnection()) {
    connection.ConnectionString = connectionString;
    connection.Open();

    using(var command = new connection.CreateCommand()) {
        command.CommandText = "{sql-query}";    //this needs to be tailored for each database system

        using(var reader = command.ExecuteReader()) {
            while(reader.Read()) {
                ...
            }
        }
    }
}