Я создал «универсальную» программу, которая преобразует данные из БД в другую. Он использует файлы конфигурации для определения преобразования. Он использует такой код:
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). Теперь я сбит с толку.
Спасибо заранее и с наилучшими пожеланиями - Матти