如何替换使用现在过时的System.Data.OracleClient命名空间类的代码?

时间:2011-10-13 13:00:15

标签: oracle .net-4.0 ado.net system.data.oracleclient

我制作了一个“通用”程序,可以将数据从数据库转换为另一个数据库。它使用配置文件来定义转换。它使用这样的代码:

static DbProviderFactory _srcProvFactory;
static DbProviderFactory _trgtProvFactory;

public static bool DoConversions()
{
    try
    {
        if (!InitConfig())
            return false;

        _srcProvFactory = DbProviderFactories.GetFactory(GetConnectionClassTypeByDatabaseType(Preferences.SourceDatabaseType));

        _trgtProvFactory = DbProviderFactories.GetFactory(GetConnectionClassTypeByDatabaseType(Preferences.TargetDatabaseType));

        using (DbConnection srcCnctn = _srcProvFactory.CreateConnection(),
               trgtCnctn = _trgtProvFactory.CreateConnection())
        {
            srcCnctn.ConnectionString = Preferences.SourceConnectionString;
            srcCnctn.Open();
            trgtCnctn.ConnectionString = Preferences.TargetConnectionString;
            trgtCnctn.Open();

            //DO STUFF
        }
   }
}

以上GetConnectionClassTypeByDatabaseType方法根据配置文件返回类似“System.Data.OracleClient”的字符串。

DO STUFF部分调用下面的方法(其中有很多)来从模式中找出数据库表列属性。这是必要的,因为Oracle,SQL服务器等处理这些不同。

public static int GetColumnMaxStringLength(DbProviderFactory provFactory, DataRow schemaTableRow)
{
    if (provFactory is OracleClientFactory)
    {
        return Convert.ToInt32(schemaTableRow["LENGTH"]);
    }
    else if // OTHER OPTIONS
      ...    
    throw new Exception(string.Format("Unsupported DbProviderFactory -type: {0}", provFactory.GetType().ToString()));
}

那么当构建说这些类已经过时时,应该如何修复它?当我这样做时,这被认为是一种教科书解决方案(Pro C#2008和 .NET 3.5平台)。现在我感到很困惑。

提前致谢&最诚挚的问候 - 马蒂

1 个答案:

答案 0 :(得分:0)

ODP.NET或任何其他第三方ADO.NET驱动程序提供商:

参考:Comparison of 3rd Party Oracle .NET Providers