C Sharp > Пример использования переменных в SSIS - задаче Скрипт(script task)
24.04.2018 15:52:02
Наиболее часто встречающиеся слова в статье:
[«Скрипт»] [каждому] [скрипте] [Variables] [использовать] [переменных] [переменной] ["Скрипт"] [необходимо] [переменные]
Статья:
Переменные позволяют задаче «Скрипт» обмениваться данными с другими объектами в пакете.
Вот например как вывести значение переменной MessageBox.Show(Dts.Variables["Myname"].Value.Tosting()
В задаче "Скрипт" используется свойство Variables объекта Dts для чтения из объектов Variableв пакете и записи в них.
Примечание
Свойство Value класса Variable имеет тип Object. В задаче "Скрипт" включен параметр Option Strict, поэтому необходимо привести свойство Value к соответствующему типу, прежде чем можно будет его использовать.
Необходимо добавить существующие переменные в списки ReadOnlyVariables и ReadWriteVariables в редакторе задачи "скрипт", чтобы сделать их доступными в пользовательском скрипте. Помните, что в именах переменных учитывается регистр. В скрипте обращаться к переменным обоих типов можно с помощью свойства Variables объекта Dts.Используйте свойство Value, чтобы считывать значения отдельных переменных и записывать значения в них. Задача «Скрипт» обеспечивает прозрачное для пользователя управление блокировкой во время считывания и изменение значений переменных в скрипте.
Чтобы проверить наличие переменной перед ее использованием в коде, можно использовать метод Contains коллекции Variables, возвращенной свойством Variables.
Для работы с переменными в задаче "скрипт" можно также использовать свойство VariableDispenser (Dts.VariableDispenser). При использовании свойства VariableDispenserнеобходимо обрабатывать в коде и семантику блокирования, и приведение типов данных для значений переменных. Может потребоваться использовать свойство VariableDispenser вместо свойства Variables, если возникает необходимость работать с переменной, недоступной во время разработки, но создаваемой программным путем во время выполнения.
Использование задачи «Скрипт» в контейнере «цикл по каждому элементу»
Если задача «Скрипт» неоднократно запускается в контейнере «цикл по каждому элементу», то в скрипте обычно требуется обеспечить работу с содержимым текущего элемента в перечислителе. Например, при использовании перечислителя с циклом по каждому файлу в скрипте требуется определить имя текущего файла, а при использовании перечислителя ADO по каждой строке в скрипте необходимо получать содержимое столбцов в текущей строке данных.
Переменные делают возможной такую связь между контейнером «цикл по каждому элементу» и задачей «Скрипт». На странице Сопоставления переменной окна Редактор циклов по каждому элементу необходимо присвоить переменные каждому элементу данных, возвращаемому одним перечисленным элементом. Например, перечислитель с циклом по каждому файлу возвращает только имя файла из позиции с индексом 0 и поэтому требует сопоставления лишь с одной переменной, а перечислитель, который возвращает несколько столбцов данных из каждой строки, требует сопоставить отдельную переменную с каждым столбцом, предназначенным для использования в задаче «Скрипт».
После сопоставления перечисленных элементов с переменными необходимо добавить сопоставленные переменные к свойству ReadOnlyVariables на странице Скрипт окна редактора задачи "скрипт", чтобы сделать их доступными в скрипте. Пример применения задачи "Скрипт" в контейнере "цикл по каждому элементу" для обработки файлов изображений в папке см. в разделе Работа с изображениями в задаче "Скрипт".
Пример использования переменных
В следующем примере показано, как получить доступ и использовать переменные в
задаче «Скрипт», чтобы определить пути рабочего процесса пакета. В
этом образце предполагается, что в редакторе
задачи "скрипт" созданы и добавлены к коллекции ReadOnlyVariablesцелочисленные
переменные CustomerCount
и MaxRecordCount
. Переменная CustomerCount
содержит
количество записей с данными заказчиков, которые должны быть импортированы.Если
это значение больше значения MaxRecordCount
,
задача «Скрипт» сообщает о неудачном завершении. Если
неудачное завершение возникает из-за превышения порогового значения MaxRecordCount
,
в пути обработки ошибок рабочего процесса можно реализовать все необходимые
операции очистки.
Чтобы успешно откомпилировать этот образец, необходимо добавить ссылку на сборку Microsoft.SqlServer.ScriptTask.
using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; public class ScriptMain { public void Main() { int customerCount; int maxRecordCount; if (Dts.Variables.Contains("CustomerCount")==true&&Dts.Variables.Contains("MaxRecordCount")==true) { customerCount = (int) Dts.Variables["CustomerCount"].Value; maxRecordCount = (int) Dts.Variables["MaxRecordCount"].Value; } if (customerCount>maxRecordCount) { Dts.TaskResult = (int)ScriptResults.Failure; } else { Dts.TaskResult = (int)ScriptResults.Success; } } }