Poznámka: Tato odpověď je relevantní, pokud se rozhodnete použít základní funkce ADO.NET 2 namísto ORM (jako je Entity Framework nebo NHibernate) nebo LINQ to SQL.
Předpokládejme, že máte připojovací řetězec definovaný v app.config
:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Všimněte si přítomnosti providerName
atribut a jeho hodnotu. Můžete také zadat hodnotu pro jiného poskytovatele DB, např. System.Data.SQLite
.
(Všimněte si, že nestandardní poskytovatelé, tj. ti, kteří nejsou ve výchozím nastavení v .NET Framework, je třeba nejprve zaregistrovat, a to buď v app.config
nebo v machine.config
klientského počítače .)
Nyní můžete pracovat se zadanou databází zcela bez ohledu na poskytovatele následovně:
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();
}
}
Všimněte si, jak tento kód funguje pouze s typy rozhraní. Jediným místem, kde uvádíte konkrétního poskytovatele DB, je providerName
hodnotu atributu v app.config
soubor. (Označil jsem všechna místa, kde je nastavení z app.config
je převzato pomocí ^^^
s.)
Další čtení:
-
Generic Coding with ADO.NET 2.0 Base Classes and Factories:
podobné mé odpovědi, ale jde do podrobností. -
ADO.NET Managed Providers a DataSet Developer Center:
zahrnuje mimo jiné index dostupných poskytovatelů databází ADO.NET.