2010-02-01 3 views
9

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

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

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

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

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

+0

Возможный дубликат [SSIS: как вы повторно используете скрипт в компоненте сценариев в другом пакете?] (Http://stackoverflow.com/questions/6692779/ssis-how-do-you-reuse-script-in- a-scripting-component-in-another-package) –

ответ

10

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

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

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

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

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

+0

. Ссылка в другом ответе дает пошаговое описание для # 1 –

1

Я уверен, что возможно получить доступ к сборкам .NET в сценариях SSIS. Таким образом, вы могли бы сделать это таким образом. См. the article "Accessing .NET assemblies with SSIS" в SQL Server Central.

+0

Это в основном хороший шаг за шагом для # 1 в верхнем ответе –

0

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

0

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

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

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

  3. На панели Project Explorer, нажмите на кнопку «Показать все файлы»

  4. правой кнопкой мыши на ваших файлов и добавления к проекту

-1

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

+0

Это работает но имеет существенные недостатки. Каждый скрипт скомпилирован с собственной копией «общего» кода, и если вы не коснетесь каждой задачи, использующей ссылочный файл, изменения в общем коде не будут иметь никакого эффекта. То есть, они не будут автоматически перекомпилироваться, если общий источник изменится. – bielawski