Загрузчик данных по сценарию

Дизайн14 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
27.04.2020

Требуется написать загрузчик данных из нескольких ODBC-источников в приемник (MSSQL) согласно сценарию.

Требования к используемым технологиям:

- .Net Framework 4.5

- ADO.NET

- MS SQL Server

- Для работы с приемником использовать SqlConnection, SqlCommand, SqlTableAdapter

- Для работы с источниками использовать OleDbConnection, OleDbCommand, OleDbTableAdapter

Загрузчик должен представлять собой консольное приложение, запускаемое из командной строки.

В папке с загрузчиком будет находиться xml-файл scenario.xml с описанием сценария загрузки.

Файл будет иметь следующую структуру:

 

    Data Source=.;Initial Catalog=Report;Integrated Security=True

    exec spTansformAndLoadTables

 

 

   

      select max(callstart) from calls

      Dsn=Odbc1;uid=user;pwd=password

      select * from calls where callstart > ? order by callstart

   

   

      select max(callstart) from calls

      Dsn=Odbc2;uid=user;pwd=password

      select * from calls where callstart > ? order by callstart

   

    ...

   

      ...

   

 

Ниже описан пошагово алгоритм работы загрузчика:

1. Из секции destination взять строку соединения с приемником connectionString. Далее она будет использоваться везде при соединении с приемником.

2. Последовательно из секции tables перебираем все подсекции table. Для каждой table делаем следующие шаги:

3. Берем имя таблицы из атрибута Name и посылаем запрос 'truncate Name' в приемник (например, 'truncate table Odbc1_calls')

4. Берем запрос из тега destinationLastRecordQuery и посылаем в приемник, в ответ получаем дату/время

5. Полученную дату/время подставляем в параметр запроса из тега sourceQuery и получаем данные из источника, используя строку конекта sourceConnectionString.

Учтите, что дату/время необходимо подставлять в запрос не путем конкатентации строк, а с помощью передачи параметров в объект класса OleDbCommand

6. Далее формируем текст запроса для вставки строк, полученных из источника, в приемник.

За один запрос может быть вставлено не более чем количество записей, заданное в атрибуте BatchSize.

Будет гарантировано, что в приемнике таблица уже существует и ее структура полностью соответствует структуре таблицы из источника.

Будет гарантировано что в источнике типы полей могут быть только int, DateTime, string

7. При успешном окончании обработки всей секции tables в приемник посылаем запрос из тега postloadQuery