【问题标题】:Oracle to SQL Server database migration for an ASP.NET project用于 ASP.NET 项目的 Oracle 到 SQL Server 数据库迁移
【发布时间】:2017-04-25 15:18:39
【问题描述】:

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

特别是在代码中有一个用处

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

我不知道如何替换上面 GetFactory 方法的字符串参数以适应 SQL Server 数据库。

我应该像下面这样做吗?

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

【问题讨论】:

  • 你试过了吗?结果如何?
  • 我现在不能尝试,因为我暂时只修改了项目的一小部分,在全部修改之前我无法运行它,但我仍然想避免最大由于前期迁移导致的错误数量。
  • 所以创建一个小范围的概念验证项目,以便您对其进行测试。

标签: c# asp.net sql-server oracle


【解决方案1】:

您可以完全控制在 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

【讨论】:

  • 在我的网络配置中,我在“connectionStrings”标签内,“”标签包含一个属性providerName="Oracle.DataAccess.Client",所以我应该添加另一个带有“providerName=”的标签System.Data.SqlClient" ??? @rene
  • @Neo 不,System.Data.SqlClient 应该默认存在 dataprovider,因此您不需要在配置文件中使用它。但是,如果您想覆盖使用的内容,则可以添加它。
猜你喜欢
  • 2018-08-01
  • 2019-02-14
  • 2020-01-21
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多