Пример использования переменных в SSIS - задаче Скрипт(script task)

C Sharp > Пример использования переменных в SSIS - задаче Скрипт(script task)
24.04.2018 15:52:02



Статья:

Переменные позволяют задаче «Скрипт» обмениваться данными с другими объектами в пакете. 

Вот например как вывести значение  переменной 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;  
        }  
 
    }  
 
}