Bemærk: Dette svar er relevant, hvis du beslutter dig for at bruge grundlæggende ADO.NET 2-funktionalitet i stedet for en ORM (såsom Entity Framework eller NHibernate) eller LINQ til SQL.
Lad os antage, at du har en forbindelsesstreng defineret i din app.config
:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Bemærk tilstedeværelsen af providerName
egenskab og dens værdi. Du kan også indsætte en værdi for en anden DB-udbyder, f.eks. System.Data.SQLite
.
(Bemærk, at ikke-standardudbydere, dvs. dem, der ikke er i .NET Framework som standard, skal registreres først, enten i app.config
eller i klientmaskinens machine.config
.)
Nu kan du arbejde med den angivne database på en fuldstændig udbyderagnostisk måde som følger:
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();
}
}
Bemærk, hvordan denne kode kun virker med grænsefladetyper. Det eneste sted, hvor du angiver en bestemt DB-udbyder, er gennem providerName
attributværdi i app.config
fil. (Jeg har markeret alle de steder, hvor en indstilling fra app.config
er taget med ^^^
s.)
Yderligere læsning:
-
Generisk kodning med ADO.NET 2.0 basisklasser og fabrikker:
ligner mit svar, men går mere i detaljer. -
ADO.NET Managed Providers and DataSet Developer Center:
inkluderer blandt andet et indeks over tilgængelige ADO.NET-databaseudbydere.