Как заменить код, который использует устаревшие классы пространства имен System.Data.OracleClient? - PullRequest
1 голос
/ 13 октября 2011

Я создал «универсальную» программу, которая преобразует данные из БД в другую. Он использует файлы конфигурации для определения преобразования. Он использует такой код:

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 голосов
/ 22 марта 2014

ODP.NET или любых других сторонних поставщиков драйверов ADO.NET:

ref: Сравнение сторонних поставщиков Oracle .NET

...