2017-04-25 62 views
1

我必须在ASP.NET项目上执行Oracle到SQL Server的数据库迁移,所以我基本上正在研究C#代码来修改数据库相关的类/方法以适应新的数据库。从Oracle到SQL Server数据库迁移的ASP.NET项目

特别是,有在该线路

DbProviderFactory myFactory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client"); 

的代码使用我不知道如何来取代上述GetFactory方法的字符串参数,以适应一个SQL Server数据库。

我应该做一下类似的事情吗?

DbProviderFactory myFactory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 
+0

你试过了吗?结果是什么? – mason

+0

我现在无法尝试,因为我现在只修改了一小部分项目,并且在修改完所有项目之前我无法运行,但我仍然希望避免由于迁移而导致的最大数量的错误前期。 – Neo

+0

因此,创建一个小范围的概念验证项目,以便您可以对其进行测试。 –

回答

0

您完全可以控制您在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)。或者,如果machine.config中的某个工厂没有按照您的要求执行操作,那么您可以使用clear工厂。

在那些在在配置上面也有(这是不变的名称)被默认加载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 Framework一起提供的内置DbFactory for Sql Server,您正在寻找System.Data.SqlClient。或者将您自己的配置添加到项目特定的invariant名称中,并通过在您的网络中对其进行配置将其链接到选定的DBFactory。config

+0

在我的web配置里有'connectionStrings'标签,''标签包含一个属性'providerName =“Oracle.DataAccess.Client”',所以我应该只用'providerName ='System.Data添加另一个标签。 SqlClient“? @rene – Neo

+0

@Neo不,System.Data.SqlClient应该由默认的dataprovider存在,所以你不需要它在你的配置文件中。但是,如果你想覆盖使用什么,那么你可以添加它。 – rene

相关问题