1

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

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 Server 等以不同方式处理这些问题。

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 平台)。现在我很困惑。

在此先感谢并致以最诚挚的问候-马蒂

4

1 回答 1

0

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

参考:第 3 方 Oracle .NET 提供商的比较

于 2014-03-22T01:23:36.990 回答