Hinweis: Diese Antwort ist relevant, wenn Sie sich entscheiden, die grundlegende ADO.NET 2-Funktionalität anstelle eines ORM (wie Entity Framework oder NHibernate) oder LINQ to SQL zu verwenden.
Nehmen wir an, Sie haben eine Verbindungszeichenfolge in Ihrer app.config
definiert :
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Beachten Sie das Vorhandensein von providerName
Attribut und seinen Wert. Sie können auch einen Wert für einen anderen DB-Anbieter eingeben, z. System.Data.SQLite
.
(Beachten Sie, dass Nicht-Standardanbieter, d. h. solche, die standardmäßig nicht im .NET Framework enthalten sind, zuerst registriert werden müssen, entweder in app.config
oder in der machine.config
des Client-Rechners .)
Jetzt können Sie wie folgt vollständig anbieterunabhängig mit der angegebenen Datenbank arbeiten:
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();
}
}
Beachten Sie, dass dieser Code nur mit Schnittstellentypen funktioniert. Der einzige Ort, an dem Sie einen bestimmten DB-Anbieter angeben, ist der providerName
Attributwert in der app.config
Datei. (Ich habe alle Stellen markiert, an denen eine Einstellung aus app.config
wird mit ^^^
übernommen s.)
Weiterführende Literatur:
-
Generische Codierung mit den ADO.NET 2.0-Basisklassen und -Factories:
ähnlich meiner Antwort, geht aber ins Detail. -
ADO.NET Managed Providers and DataSet Developer Center:
enthält unter anderem einen Index verfügbarer ADO.NET-Datenbankanbieter.