Забележка: Този отговор е уместен, ако решите да използвате основна функционалност на ADO.NET 2 вместо ORM (като Entity Framework или NHibernate) или LINQ към SQL.
Да предположим, че имате низ за връзка, дефиниран във вашия app.config
:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Забележете наличието на providerName
атрибут и неговата стойност. Можете също да поставите стойност за друг доставчик на DB, напр. System.Data.SQLite
.
(Обърнете внимание, че нестандартните доставчици, т.е. тези, които не са в .NET Framework по подразбиране, трябва първо да бъдат регистрирани или в app.config
или в machine.config
на клиентската машина .)
Сега можете да работите с посочената база данни по напълно независим от доставчика начин, както следва:
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();
}
}
Обърнете внимание как този код работи само с типове интерфейси. Единственото място, където посочвате конкретен доставчик на DB, е чрез providerName
стойност на атрибута в app.config
файл. (Маркирах всички места, където има настройка от app.config
се взема с ^^^
с.)
Допълнително четене:
-
Общо кодиране с базовите класове и фабрики на ADO.NET 2.0:
подобно на моя отговор, но влиза в повече подробности. -
Център за разработчици на управлявани доставчици на ADO.NET и DataSet:
включва, наред с други неща, индекс на наличните доставчици на бази данни ADO.NET.