');

C# Language Connessioni ADO.NET

Esempio

Le connessioni ADO.NET sono uno dei modi più semplici per connettersi a un database da un'applicazione C #. Si basano sull'utilizzo di un provider e di una stringa di connessione che punta al database per eseguire query contro.

Classi di provider di dati comuni

Molte delle seguenti sono classi che vengono comunemente utilizzate per interrogare i database e i relativi spazi dei nomi:

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

Tutti questi sono comunemente usati per accedere ai dati tramite C # e verranno comunemente riscontrati durante la creazione di applicazioni incentrate sui dati. FooDataReader si può aspettare che molte altre classi che non sono menzionate che implementano le stesse FooConnection , FooCommand , FooDataReader si comportino allo stesso modo.

Modello di accesso comune per connessioni ADO.NET

Un modello comune che può essere utilizzato quando si accede ai dati tramite una connessione ADO.NET potrebbe essere il seguente:

// 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 se stavi semplicemente eseguendo un semplice aggiornamento e non avessi bisogno di un lettore, si applicherebbe lo stesso concetto di base:

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

È anche possibile programmare contro una serie di interfacce comuni e non doversi preoccupare delle classi specifiche del provider. Le interfacce principali fornite da ADO.NET sono:

  • IDbConnection - per la gestione delle connessioni del database
  • IDbCommand - per l'esecuzione di comandi SQL
  • IDbTransaction - per la gestione delle transazioni
  • IDataReader - per leggere i dati restituiti da un comando
  • IDataAdapter - per il channeling dei dati da e verso i set di dati
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()) {
                ...
            }
        }
    }
}