SSIS и повторное использование C # - PullRequest
9 голосов
/ 01 февраля 2010

Я новичок в SSIS / C # (я обычно являюсь разработчиком на Java), поэтому извиняюсь, если это действительно глупый вопрос.

По сути, проблема заключается в следующем: у меня есть две задачи потока данных, которые загружают данные и экспортируют их в устаревший формат плоских файлов. Форматирование выполняется задачей сценария (C #).

То, что я хотел бы сделать, это поделиться общим кодом между ними. например Я мог бы создать общий базовый класс, а затем расширить его для двух разных задач скрипта.

Однако кажется, что SSIS на самом деле не предусматривает этого.

Кто-нибудь знает, есть ли способ выполнить то, что я хочу сделать?

Ответы [ 5 ]

11 голосов
/ 01 февраля 2010

Вы правы, что не существует прямого способа сделать это непосредственно из SSIS.

В недавнем проекте мы использовали два разных подхода, оба из которых работали довольно хорошо в зависимости от того, что вам нужно сделать:

  1. Создайте служебный класс (в виде простой библиотеки классов) и создайте ссылку на него из ваших задач сценария. Это сделано почти так же, как и любой другой вид ссылки. Если вы используете .NET 3.5, помните, что вам придется обновлять версию вручную в задачах скрипта, поскольку SSIS по умолчанию равен 2.0. Мы также обнаружили, что если мы хотим использовать какой-либо способ повторного использования в сборке утилиты (не полагаясь на жестко запрограммированные имена переменных и т. Д.), То пакет все равно должен иметь достаточно большое количество шаблонов «установки» для использования утилитных сценариев.

  2. Создание пользовательского компонента потока данных. Это гораздо более сложный процесс, но в конечном итоге он сделает все возможное, чтобы избежать дублирования кода. Как правило, кодирование фактического потока данных довольно просто и не сильно отличается от компонента скрипта, но различный код установки, который вам понадобится, может усложнить задачу. Также в SSIS не так много поддержки, когда что-то идет не так. Привел к большой детективной работе над нашим проектом.

Если вы планируете использовать что-то много и намерены максимально избавиться от стандартного кода, 2 является предпочтительным вариантом. Если здесь и там используется несколько мест, рассмотрите простой подход 1.

2 голосов
/ 01 февраля 2010

Я почти уверен, что можно получить доступ к сборкам .NET в скриптах SSIS. Таким образом, вы могли бы сделать это таким образом. См. статью «Доступ к сборкам .NET с помощью служб SSIS» в SQL Server Central.

0 голосов
/ 24 июня 2013

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

0 голосов
/ 04 марта 2013

Это не полностью решает вашу проблему, но помогает не создавать заново все классы каждый раз, когда они вам нужны (я также не хочу развертывать ссылочные сборки для моего текущего проекта). Во-первых, вам нужна мастер-копия ваших классов, вы можете скопировать их из существующей задачи сценария, используя тот же процесс, что и ниже, но в обратном порядке.

  1. Откройте редактор для задачи «Сценарий» и в проводнике свойств нажмите «Файл проекта» (st_ [Guid]), в окне «Свойства» вы увидите расположение папки проекта. (Это местоположение воссоздается каждый раз, когда вы редактируете задачу скрипта)

  2. В проводнике скопируйте ваши классы в эту папку

  3. В Project Explorer щелкните значок «Показать все файлы»

  4. Щелкните правой кнопкой мыши по своим файлам и добавьте в Project

0 голосов
/ 01 февраля 2010

Я полагаю, вам нужно будет создать сборку или веб-сервис для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...