sta*_*ica 11
注意:如果您决定使用基本的ADO.NET 2功能而不是ORM(例如Entity Framework或NHibernate)或LINQ to SQL,则此答案是相关的.
假设你有一个在你的app.config:中定义的连接字符串:
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
注意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();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意此代码仅适用于接口类型.您指定特定数据库提供程序的唯一位置是通过文件中的providerName属性值app.config.(我已经app.config用^^^s 标记了设置的所有地方.)
使用ADO.NET 2.0基类和工厂的通用编码:
类似于我的回答,但更详细.
ADO.NET托管提供程序和DataSet开发人员中心:
包括可用ADO.NET数据库提供程序的索引.