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.