Сравнение задачи «Скрипт» и компонента скрипта
Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure
Задача "Скрипт", доступная в окне потока управления конструктора служб Integration Services, и компонент скрипта, доступный в окне Поток данных, имеют очень разные цели в пакете служб Integration Services. Задача представляет собой универсальное средство потока управления, а компонент служит источником, преобразованием или назначением в потоке данных. Несмотря на то что они предназначены для разных целей, между задачей «Скрипт» и компонентом скрипта имеются некоторые подобия в используемых средствах разработки кода и объектах в пакете, которые доступны разработчику с их помощью. Понимание их подобия и различия может помочь использовать задачи и компоненты более эффективно.
Подобия между задачей «Скрипт» и компонентом скрипта
Задача «Скрипт» и компонент скрипта имеют следующие общие характеристики.
Возможность | Description |
---|---|
Два режима времени разработки | Разработка задачи и компонента начинается с определения свойств в редакторе с последующим переключением в среду разработки для написания кода. |
набор средств Microsoft Visual Studio Tools для работы с приложениями (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. | Компонент скрипта выполняется в составе задачи потока данных и не сообщает о результатах ни с одним из этих свойств. |
См. также
Расширение пакета с помощью задачи "Скрипт"
Расширение потока данных с помощью компонента скрипта