Закажите услуги фрилансеров для вашего проекта прямо сейчас!

Размещение заказа на фриланс бирже бесплатно.

2 года назад
Дизайн
41 год, Россия
11 лет в сервисе
Был онлайн 2 года назад
2 года назад

Требуется написать загрузчик данных из нескольких ODBC-источников в приемник (MSSQL) согласно сценарию.
Требования к используемым технологиям:
- .Net Framework 4.5
- ADO.NET
- MS SQL Server
- Для работы с приемником использовать SqlConnection, SqlCommand, SqlTableAdapter
- Для работы с источниками использовать OleDbConnection, OleDbCommand, OleDbTableAdapter

Загрузчик должен представлять собой консольное приложение, запускаемое из командной строки.
В папке с загрузчиком будет находиться xml-файл scenario.xml с описанием сценария загрузки.
Файл будет иметь следующую структуру:

<?xml version="1.0" encoding="utf-8" ?>
<scenario>
  <destination>
    <connectionString>Data Source=.;Initial Catalog=Report;Integrated Security=True</connectionString>
    <postloadQuery>exec spTansformAndLoadTables</postloadQuery>
  </destination>
  <tables>
    <table Name="Odbc1_calls" BatchSize="1000">
      <destinationLastRecordQuery>select max(callstart) from calls</destinationLastRecordQuery>
      <sourceConnectionString>Dsn=Odbc1;uid=user;pwd=password</sourceConnectionString>
      <sourceQuery>select * from calls where callstart > ? order by callstart</sourceQuery>
    </table>
    <table Name="Odbc2_calls" BatchSize="1000">
      <destinationLastRecordQuery>select max(callstart) from calls</destinationLastRecordQuery>
      <sourceConnectionString>Dsn=Odbc2;uid=user;pwd=password</sourceConnectionString>
      <sourceQuery>select * from calls where callstart > ? order by callstart</sourceQuery>
    </table>
    ...
    <table ...>
      ...
    </table>
  </tables>
</scenario>

Ниже описан пошагово алгоритм работы загрузчика:
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

  1. Прием заявок
  2. Выбор исполнителя
  3. Выполнение заказа
  4. Обмен отзывами

Нет заявок

Другие заказы в категории «Базы данных»

Здесь заказчик и фрилансеры могут обсуждать заказ до начала его выполнения.
Фрилансеры могут участвовать в обсуждении только после подачи заявки.
Здесь заказчик будет контролировать выполнение заказа и общаться с исполнителем.
Доступ к этому разделу имеют только заказчик и выбранный исполнитель.
Все материалы этого раздела закрыты от поисковых систем.