Поделиться через


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

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

Сходство между задачей скрипта и компонентом скрипта

Задача "Скрипт" и компонент "Скрипт" используют следующие общие функции.

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

Скрипт предварительно компилируется в двоичный код, что позволяет ускорить выполнение, но за счет увеличения размера пакета.
Отладка Задача и компонент поддерживают точки останова и пошаговое выполнение кода при отладке в среде разработки. Дополнительные сведения см. в разделе "Кодирование и отладка задачи скрипта" и [Кодирование и отладка компонента скрипта](.). /extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md.

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

Задача "Скрипт" и компонент "Скрипт" имеют следующие заметные различия.

Функция Задача скрипта Компонент скрипта
Поток управления / поток данных Задача "Скрипт" настраивается на вкладке "Поток управления" конструктора и выполняется вне потока данных пакета. Компонент скрипта настраивается на странице потока данных конструктора и представляет источник, преобразование или назначение в задаче потока данных.
Цель Задача "Скрипт" может выполнять практически любую задачу общего назначения. Необходимо указать, нужно ли создать источник, преобразование или назначение с помощью компонента скрипта.
Исполнение Задача "Скрипт" выполняет пользовательский код в какой-то момент в рабочем процессе пакета. Если вы не помещаете его в контейнер цикла или обработчик событий, он выполняется только один раз. Компонент скрипта также выполняется один раз, но обычно выполняет основную подпрограмму обработки один раз для каждой строки данных в потоке данных.
Редактор Редактор задач скрипта содержит три страницы: общие, скрипты и выражения. ReadOnlyVariables Только свойства ScriptLanguageReadWriteVariablesнапрямую влияют на код, который можно написать. Редактор преобразования скрипта имеет до четырех страниц: входные столбцы, входные и выходные данные, скрипты и диспетчеры соединений. Метаданные и свойства, настроенные на каждой из этих страниц, определяют элементы базовых классов, которые автоматически создаются для использования в кодировании.
Взаимодействие с пакетом В коде, написанном для задачи "Скрипт", свойство используется Dts для доступа к другим функциям пакета. Свойство Dts является членом ScriptMain класса. В коде компонента скрипта для доступа к определенным функциям пакета, таким как переменные и диспетчеры соединений, используются свойства типизированного доступа.

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

Дополнительные сведения об этих методах см. в статье [Кодирование и отладка компонента скрипта](.). /extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md.
Использование переменных Задача "Скрипт" использует Variables свойство Dts объекта для доступа к переменным, доступным через задачи ReadOnlyVariables и ReadWriteVariables свойства. Рассмотрим пример.

[VB]

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



[C#]

string myVar; myVar = Dts.Variables["MyStringVariable"].Value.ToString();
Компонент Скрипта использует свойства типизированного доступа класса, созданного на основе автогенерированного класса, созданного из компонентов и ReadWriteVariables свойств.ReadOnlyVariables Рассмотрим пример.

[VB]

Dim myVar as String myVar = Me.Variables.MyStringVariable



[C#]

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

[VB]

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);
Компонент скрипта использует свойства типизированного доступа автогенерированного базового класса, созданного из списка диспетчеров соединений, введенных пользователем на странице диспетчеров соединений редактора. Рассмотрим пример.

[VB]

Dim connMgr As IDTSConnectionManager100 connMgr = Me.Connections.MyADONETConnection



[C#]

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

[VB]

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 . Рассмотрим пример.

[VB]

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

[VB]

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 метод автогенерированного базового класса для регистрации сведений о включенных поставщиках журналов. Рассмотрим пример.

[VB]

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);
Возвращение результатов Задача Script использует TaskResult свойство и необязательное ExecutionValue свойство Dts объекта, чтобы уведомить среду выполнения результатов. Компонент скрипта выполняется как часть задачи потока данных и не сообщает о результатах с помощью одного из этих свойств.

См. также

Расширение пакета с помощью задачи "Скрипт"
Расширение потока данных с помощью компонента скрипта
Использование задачи скрипта в SSIS служб SQL Server Integration Services для подключения к веб-службе