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 サーバーなどがこれらを異なる方法で処理するために必要です。

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 プラットフォーム)。今、私は当惑しています。

よろしくお願いいたします - Matti

4

1 に答える 1