Obs! Det här svaret är relevant om du bestämmer dig för att använda grundläggande ADO.NET 2-funktionalitet istället för en ORM (som Entity Framework eller NHibernate) eller LINQ till SQL.
Låt oss anta att du har en anslutningssträng definierad i din app.config
:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Lägg märke till förekomsten av providerName
attribut och dess värde. Du kan också lägga in ett värde för en annan DB-leverantör, t.ex. System.Data.SQLite
.
(Observera att icke-standardiserade leverantörer, det vill säga de som inte är i .NET Framework som standard, måste registreras först, antingen i app.config
eller i klientdatorns machine.config
.)
Nu kan du arbeta med den angivna databasen på ett helt leverantörs-agnostiskt sätt enligt följande:
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();
}
}
Observera hur den här koden bara fungerar med gränssnittstyper. Den enda plats där du anger en viss DB-leverantör är genom providerName
attributvärde i app.config
fil. (Jag har markerat alla platser där en inställning från app.config
tas med ^^^
s.)
Mer läsning:
-
Generisk kodning med ADO.NET 2.0 basklasser och fabriker:
liknar mitt svar, men går in mer i detalj. -
ADO.NET Managed Providers and DataSet Developer Center:
innehåller bland annat ett index över tillgängliga ADO.NET-databasleverantörer.