Примечание: Этот ответ актуален, если вы решите использовать базовые функции ADO.NET 2 вместо ORM (например, Entity Framework или NHibernate) или LINQ to SQL.
Предположим, у вас есть строка подключения, определенная в вашем app.config
:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Обратите внимание на наличие атрибута providerName
и его значение.Вы также можете ввести значение для другого поставщика БД, например 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();
}
}
Обратите внимание, как этот код работает только с типами интерфейса.Единственное место, где вы указываете конкретного поставщика БД, - это значение атрибута providerName
в файле app.config
.(Я отметил все места, где берется настройка от app.config
с ^^^
с.)
Дополнительная информация: