sql >> Base de Datos >  >> RDS >> Oracle

Mantener una base de datos de aplicación independiente (ADO.NET frente a lógica de base de datos encapsulada)

Nota: Esta respuesta es relevante si decide utilizar la funcionalidad básica de ADO.NET 2 en lugar de un ORM (como Entity Framework o NHibernate) o LINQ to SQL.

Supongamos que tiene una cadena de conexión definida en su app.config :

<connectionStrings>
    <add name="SomeConnection"
         providerName="System.Data.SqlClient"
         connectionString="..." />
</connectionStrings>

Observe la presencia de providerName atributo y su valor. También puede poner un valor para otro proveedor de base de datos, p. System.Data.SQLite .

(Tenga en cuenta que los proveedores no estándar, es decir, aquellos que no están en .NET Framework de forma predeterminada, deben registrarse primero, ya sea en app.config o en el machine.config de la máquina cliente .)

Ahora, puede trabajar con la base de datos especificada de manera completamente independiente del proveedor de la siguiente manera:

using System.Configuration;  // for ConfigurationManager
using System.Data;           // for all interface types
using System.Data.Common;    // for DbProviderFactories

var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
//                                              ^^^^^^^^^^^^^^^^

var factory = DbProviderFactories.GetFactory(cs.ProviderName);
//                                           ^^^^^^^^^^^^^^^

using (IDbConnection connection = factory.CreateConnection())
{
    connection.ConnectionString = cs.ConnectionString;
    //                            ^^^^^^^^^^^^^^^^^^^
    connection.Open();
    try
    {
        using (IDbCommand command = connection.CreateCommand())
        {
            ...  // do something with the database
        }
    }
    finally
    {
        connection.Close();
    }
}

Tenga en cuenta que este código solo funciona con tipos de interfaz. El único lugar donde indica un proveedor de base de datos en particular es a través de providerName valor del atributo en app.config expediente. (He marcado todos los lugares donde una configuración de app.config se toma con ^^^ s.)

Lecturas adicionales:

  • Codificación genérica con las clases y fábricas base de ADO.NET 2.0:
    similar a mi respuesta, pero entra en más detalles.

  • Proveedores administrados de ADO.NET y centro de desarrolladores de conjuntos de datos:
    incluye, entre otras cosas, un índice de proveedores de bases de datos de ADO.NET disponibles.