Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задача "Скрипт", доступная в окне потока управления конструктора служб 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 ByteMe.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 для подключения к веб-службе