您可以完全控制在 GetFactory 中输入的参数。
您输入的内容映射到配置文件中<DbProviderFactories> 的设置,该文件是 machine.config 和 web.config 的组合集。
在我的 machine.config 我有:
<system.data>
<DbProviderFactories>
<add invariant="System.Data.SqlServerCe.3.5" name="Microsoft SQL Server Compact Data Provider" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add invariant="System.Data.SqlServerCe.4.0" name="Microsoft SQL Server Compact Data Provider 4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add invariant="MySql.Data.MySqlClient" name="MySQL Data Provider" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
</DbProviderFactories>
</system.data>
但取决于您是否安装了其他数据库提供程序 might also find
<add invariant="IBM.Data.DB2.iSeries" name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
这些条目不限于 machine.config。您也可以将它们添加到您的 web.config。您只需确保 invariant 名称的值是唯一的(在 web.config 和 machine.config 中)。或者你可以clear 一家工厂,如果 machine.config 中的工厂不能满足你的要求。
除了配置中的那些之外,还有 4 个默认加载的内置提供程序(这是不变的名称)
- System.Data.Odbc
- System.Data.OleDb
- System.Data.OracleClient
- System.Data.SqlClient
因此,如果您询问要使用什么工厂名称,这取决于您安装了什么,但如果您正在寻找 Sql Server 客户端 System.Data.SqlClient 应该可以工作。
如果您想让您的同行(可能还有您自己)真正感到困惑,您可以将其添加到您的 web.config 中(对于 .Net 4.0 应用程序):
<system.data>
<DbProviderFactories>
<!-- remove everything predefined -->
<clear />
<!-- add the providers you want to use -->
<!-- Notice how the name is totally unrelated now
to the actual dbfactory that will be returned
-->
<add invariant="Oracle.DataAccess.Client"
name="A trick to use SqlServer without code change"
description="fubar"
type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</DbProviderFactories>
</system.data>
在这种情况下,您无需更改代码中的任何内容。从现在开始,您的应用程序将使用 SqlServer 工厂。
tl;dr;
如果您想使用您使用的 .Net 框架随附的用于 Sql Server 的内置 DbFactory,您正在寻找 System.Data.SqlClient。或者使用项目特定的invariant 名称添加您自己的配置,并通过在 web.config 中进行配置将其链接到选择的 DBFactory