Сравнение задачи «Скрипт» и компонента скрипта

Применимо к: SQL Server Integration Runtime служб SSIS в Фабрика данных Azure

Задача "Скрипт", доступная в окне "Поток управления" конструктора служб Службы Integration Services, и компонент скрипта, доступный в окне "Поток данных", предназначены в пакете служб Службы Integration Services для разных целей. Задача представляет собой универсальное средство потока управления, а компонент служит источником, преобразованием или назначением в потоке данных. Несмотря на то что они предназначены для разных целей, между задачей «Скрипт» и компонентом скрипта имеются некоторые подобия в используемых средствах разработки кода и объектах в пакете, которые доступны разработчику с их помощью. Понимание их подобия и различия может помочь использовать задачи и компоненты более эффективно.

Подобия между задачей «Скрипт» и компонентом скрипта

Задача «Скрипт» и компонент скрипта имеют следующие общие характеристики.

Компонент Описание
Два режима времени разработки Разработка задачи и компонента начинается с определения свойств в редакторе с последующим переключением в среду разработки для написания кода.
MicrosoftVisual Studio Средства для приложений (VSTA) И для задачи и для компонента используется одна и та же интегрированная среда разработки средств VSTA, а поддерживающий код пишется на языке Microsoft Visual Basic либо Microsoft Visual C#.
Предварительно откомпилированные скрипты Начиная с версии служб Службы SQL Server 2008 Integration Services (SSIS), все скрипты предварительно компилируются. В более ранних версиях предусмотрена возможность указать, должны ли скрипты быть предварительно откомпилированы.

Предварительная компиляция скрипта приводит к получению двоичного кода, который позволяет повысить быстродействие выполнения, но за счет увеличенного размера пакета.
Отладка И в задаче и в компоненте поддерживаются точки останова и пошаговое выполнение кода во время отладки в среде разработки. Дополнительные сведения см. в разделах Кодирование и отладка задачи "Скрипт" и Кодирование и отладка компонента скрипта.

Различия между задачей «Скрипт» и компонентом скрипта

Между задачей «Скрипт» и компонентом скрипта имеются следующие различия.

Компонент Задача «Скрипт» Компонент скрипта
Поток управления или поток данных Настройка задачи «Скрипт» выполняется на вкладке «Поток управления» конструктора и запускается вне потока данных пакета. Настройка компонента скрипта выполняется на странице конструктора «Поток данных», а компонент представляет источник, преобразование или назначение в задаче потока данных.
Назначение Задача «Скрипт» позволяет выполнять почти любую задачу общего назначения. С помощью компонента скрипта можно указать, следует ли создать источник, преобразование или назначение.
Выполнение Задача «Скрипт» запускает пользовательский код в определенной точке рабочего процесса пакета. Если задача не помещена в контейнер цикла или обработчик события, она выполняется только один раз. Компонент скрипта также выполняется однократно, но, как правило, он выполняет свою главную процедуру обработки по одному разу для каждой строки данных в потоке данных.
Редактор Редактор задачи "Скрипт" содержит три страницы: Общие, Скрипт и Выражения. На код, который вы пишете, напрямую влияют только свойства ReadOnlyVariables, ReadWriteVariables и ScriptLanguage. Редактор преобразования "Скрипт" может содержать до четырех страниц: Входные столбцы, Входы и выходы, Скрипт и Диспетчер подключений. Каждая из этих страниц предназначена для настройки метаданных и свойств, определяющих, какие элементы базовых классов автоматически формируются для использования при разработке кода.
Взаимодействие с пакетом В коде, написанном для задачи "Скрипт", для доступа к другим функциям пакета используется свойство Dts. Свойство Dts является членом класса ScriptMain. В коде компонента скрипта используются свойства типизированного метода доступа для получения доступа к определенным средствам пакета, таким как переменные и диспетчеры соединений.

Метод PreExecute может обращаться только к переменным, доступным только для чтения. Метод PostExecute может обращаться как к переменным, доступным только для чтения, так и к переменным, доступным для чтения и записи.

Дополнительные сведения об этих методах см. в разделе Кодирование и отладка компонента скрипта.
Использование переменных Задача "Скрипт" использует свойство Variables объекта Dts, чтобы получить доступ к переменным, доступным через свойства задачи ReadOnlyVariables и ReadWriteVariables. Пример:

[Visual Basic]

Dim myVar as String
myVar = Dts.Variables("MyStringVariable").Value.ToString

[C#]

string myVar;
myVar = Dts.Variables["MyStringVariable"].Value.ToString();
В компоненте скрипта используются свойства типизированного метода доступа, относящиеся к автоматически сформированному базовому классу, который создан на основе свойств компонентов ReadOnlyVariables и ReadWriteVariables. Пример:

[Visual Basic]

Dim myVar as String
myVar = Me.Variables.MyStringVariable

[C#]

string myVar;
myVar = this.Variables.MyStringVariable;
Использование соединений Чтобы получить доступ к диспетчерам подключений, определенным в пакете, в задаче "Скрипт" используется свойство Connections объекта Dts. Пример:

[Visual Basic]

Dim myFlatFileConnection As String
myFlatFileConnection = _ DirectCast(Dts.Connections("Test Flat File Connection").AcquireConnection(Dts.Transaction), _ String)

[C#]

string myFlatFileConnection;
myFlatFileConnection = (Dts.Connections["Test Flat File Connection"].AcquireConnection(Dts.Transaction) as String);
В компоненте скрипта используются свойства типизированного метода доступа, относящиеся к автоматически сформированному базовому классу, который создан на основе списка диспетчеров соединений, введенного пользователем на странице «Диспетчеры соединений» редактора. Пример:

[Visual Basic]

Dim connMgr As IDTSConnectionManager100
connMgr = Me.Connections.MyADONETConnection

[C#]

IDTSConnectionManager100 connMgr;
connMgr = this.Connections.MyADONETConnection;
Инициирование событий В задаче "Скрипт" для инициирования событий используется свойство Events объекта Dts. Пример:

[Visual Basic]

Dts.Events.FireError(0, "Event Snippet", _ ex.Message & ControlChars.CrLf & ex.StackTrace, _ "", 0)

[C#]

Dts.Events.FireError(0, "Event Snippet", ex.Message + "\r" + ex.StackTrace, "", 0);
Компонент скрипта инициирует ошибки, предупреждения и информационные сообщения с помощью методов интерфейса IDTSComponentMetaData100, возвращаемых свойством ComponentMetaData. Пример:

[Visual Basic]

Dim myMetadata as IDTSComponentMetaData100 myMetaData = Me.ComponentMetaData myMetaData.FireError(...)
Ведение журнала Для ведения журналов во включенных регистраторах в задаче "Скрипт" используется метод Log объекта Dts. Пример:

[Visual Basic]

Dim bt(0) As Byte Dts.Log("Test Log Event", _ 0, _ bt)

[C#]

byte[] bt = new byte[0];
Dts.Log("Test Log Event", 0, bt);
В компоненте скрипта используется метод Log автоформирования базового класса для ведения журналов во включенных регистраторах. Пример:

[Visual Basic]

Dim bt(0) As Byte

Me.Log("Test Log Event", _

0, _

bt)

[C#]

byte[] bt = new byte[0]; this.Log("Test Log Event", 0, bt);
Возвращение результатов Чтобы передать в среду выполнения извещение о результате работы, в задаче "Скрипт" используются как свойство TaskResult, так и необязательное свойство ExecutionValue объекта Dts. Компонент скрипта выполняется в составе задачи потока данных и не сообщает о результатах ни с одним из этих свойств.

См. также:

Расширение пакета с помощью задачи "Скрипт"
Расширение потока данных с помощью компонента скрипта