Opmerking: Dit antwoord is relevant als u besluit om basisfunctionaliteit van ADO.NET 2 te gebruiken in plaats van een ORM (zoals Entity Framework of NHibernate) of LINQ to SQL.
Laten we aannemen dat je een verbindingsreeks hebt gedefinieerd in je app.config
:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Let op de aanwezigheid van de providerName
attribuut en de waarde ervan. U kunt ook een waarde invoeren voor een andere DB-provider, b.v. System.Data.SQLite
.
(Merk op dat niet-standaard providers, d.w.z. diegene die niet standaard in het .NET Framework staan, eerst moeten worden geregistreerd, ofwel in app.config
of in machine.config
. van de clientcomputer .)
Nu kunt u als volgt op een volledig provider-onafhankelijke manier met de gespecificeerde database werken:
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();
}
}
Merk op hoe deze code alleen werkt met interfacetypes. De enige plaats waar u een bepaalde DB-provider aangeeft, is via de providerName
attribuutwaarde in de app.config
het dossier. (Ik heb alle plaatsen gemarkeerd waar een instelling van app.config
is genomen met ^^^
s.)
Verder lezen:
-
Generieke codering met de ADO.NET 2.0 basisklassen en fabrieken:
vergelijkbaar met mijn antwoord, maar gaat in meer detail. -
ADO.NET Managed Providers en DataSet Developer Center:
bevat onder andere een index van beschikbare ADO.NET databaseproviders.