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


Написание кода и отладка задачи «Скрипт»

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

После настройки задачи "Скрипт" в окне Редактор задачи "Скрипт" нужно создать пользовательский код в среде разработки задачи "Скрипт".

Среда разработки задачи «Скрипт»

Задача "Скрипт" использует набор средств Microsoft Visual Studio Tools для работы с приложениями (VSTA) в качестве среды разработки для самого скрипта.

Код скрипта написан в Microsoft Visual Basic или Microsoft Visual C#. Пользователь указывает язык скрипта, задавая значение свойства ScriptLanguage в окне Редактор задачи "Скрипт". Если разработчик предпочитает пользоваться другим языком программирования, можно разработать пользовательскую сборку на выбранном языке и вызвать его функциональные возможности из кода в задаче «Скрипт».

Скрипт, созданный в задаче «Скрипт», хранится в определении пакета. Отдельного файла скрипта не существует. Поэтому использование задачи «Скрипт» не влияет на развертывание пакета.

Примечание.

При проектировании пакета и отладке скрипта код скрипта временно записывается в файл проекта. Хранение конфиденциальных сведений в файле представляет потенциальный риск для безопасности, поэтому в код скрипта не рекомендуется включать конфиденциальные данные, например пароли.

По умолчанию параметр Option Strict в интегрированной среде разработки отключен.

Структура проекта задачи «Скрипт»

При создании или изменении скрипта, содержащегося в задаче «Скрипт» средства VSTA открывают новый пустой проект или повторно открывают существующий проект. Создание этого проекта VSTA не влияет на развертывание пакета, поскольку проект сохраняется внутри пакетного файла и задача «Скрипт» не создает дополнительных файлов.

Элементы и классы проекта в проекте задачи «Скрипт»

По умолчанию проект задачи "Скрипт", отображаемый в окне обозревателя проектов VSTA, содержит один элемент — ScriptMain. В свою очередь, элемент ScriptMain содержит один класс, именуемый ScriptMain. Элементы кода в классе изменяются в зависимости от языка программирования, выбранного для задачи «Скрипт».

  • Если задача "Скрипт" настроена для языка программирования Visual Basic, класс ScriptMain содержит открытую подпрограмму Main. Подпрограмма ScriptMain.Main является методом, который вызывается во время выполнения задачи "Скрипт".

    По умолчанию единственным кодом в подпрограмме Main нового скрипта является строка Dts.TaskResult = ScriptResults.Success. Эта строка извещает среду выполнения об успешной работе задачи. Свойство Dts.TaskResult описано в разделе Возврат результатов из задачи "Скрипт".

  • Если для задачи "Скрипт" задан язык программирования Visual C#, то класс ScriptMain имеет публичный метод Main. Этот метод вызывается при запуске задачи «Скрипт».

    По умолчанию метод Main включает строку Dts.TaskResult = (int)ScriptResults.Success. Эта строка извещает среду выполнения об успешной работе задачи.

Элемент ScriptMain может содержать классы, отличные от класса ScriptMain. Классы доступны только задаче «Скрипт», в которой они находятся.

По умолчанию элемент проекта ScriptMain содержит следующий автоматически формируемый код. В шаблоне кода также имеются общие сведения о задаче «Скрипт» и дополнительные сведения о получении и управлении такими объектами служб SSIS, как переменные, события и подключения.

' Microsoft SQL Server Integration Services Script Task  
' Write scripts using Microsoft Visual Basic 2008.  
' The ScriptMain is the entry point class of the script.  
  
Imports System  
Imports System.Data  
Imports System.Math  
Imports Microsoft.SqlServer.Dts.Runtime.VSTAProxy  
  
<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _  
Partial Class ScriptMain  
  
Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup  
  
End Sub  
  
Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown  
Try  
' Unlock variables from the read-only and read-write variable collection properties  
If (Dts.Variables.Count <> 0) Then  
Dts.Variables.Unlock()  
End If  
Catch ex As Exception  
        End Try  
End Sub  
  
Enum ScriptResults  
Success = DTSExecResult.Success  
Failure = DTSExecResult.Failure  
End Enum  
  
' The execution engine calls this method when the task executes.  
' To access the object model, use the Dts property. Connections, variables, events,  
' and logging features are available as members of the Dts property as shown in the following examples.  
'  
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value  
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)  
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)  
'  
' To use the connections collection use something like the following:  
' ConnectionManager cm = Dts.Connections.Add("OLEDB")  
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"  
'  
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.  
'   
' To open Help, press F1.  
  
Public Sub Main()  
'  
' Add your code here  
'  
Dts.TaskResult = ScriptResults.Success  
End Sub  
  
End Class  
/*  
   Microsoft SQL Server Integration Services Script Task  
   Write scripts using Microsoft Visual C# 2008.  
   The ScriptMain is the entry point class of the script.  
*/  
  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Runtime.VSTAProxy;  
using System.Windows.Forms;  
  
namespace ST_1bcfdbad36d94f8ba9f23a10375abe53.csproj  
{  
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]  
    public partial class ScriptMain  
    {  
        private void ScriptMain_Startup(object sender, EventArgs e)  
        {  
  
        }  
  
        private void ScriptMain_Shutdown(object sender, EventArgs e)  
        {  
            try  
            {  
                // Unlock variables from the read-only and read-write variable collection properties  
                if (Dts.Variables.Count != 0)  
                {  
                    Dts.Variables.Unlock();  
                }  
            }  
            catch  
            {  
            }  
        }  
  
        #region VSTA generated code  
        private void InternalStartup()  
        {  
            this.Startup += new System.EventHandler(ScriptMain_Startup);  
            this.Shutdown += new System.EventHandler(ScriptMain_Shutdown);  
        }  
        enum ScriptResults  
        {  
            Success = DTSExecResult.Success,  
            Failure = DTSExecResult.Failure  
        };  
  
        #endregion  
  
        /*  
The execution engine calls this method when the task executes.  
To access the object model, use the Dts property. Connections, variables, events,  
and logging features are available as members of the Dts property as shown in the following examples.  
  
To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;  
To post a log entry, call Dts.Log("This is my log text", 999, null);  
To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);  
  
To use the connections collection use something like the following:  
ConnectionManager cm = Dts.Connections.Add("OLEDB");  
cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";  
  
Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.  
  
To open Help, press F1.  
*/  
  
        public void Main()  
        {  
            // TODO: Add your code here  
            Dts.TaskResult = (int)ScriptResults.Success;  
        }  
    }  

Дополнительные элементы проекта в проекте задачи «Скрипт»

Проект задачи "Скрипт" может содержать элементы, отличные от элемента ScriptMain по умолчанию. К проекту можно добавлять классы, модули и файлы кодов. Можно также использовать папки для организации групп элементов. Все добавляемые элементы сохраняются внутри пакета.

Ссылки в проекте задачи «Скрипт»

Чтобы добавить ссылки в управляемые сборки, щелкните правой кнопкой мыши проект задачи "Скрипт" в Обозревателе проектов, затем выберите Добавить ссылку. Дополнительные сведения см. в разделе Ссылки на другие сборки в решениях со сценариями.

Примечание.

Ссылки проекта можно просмотреть в среде разработки VSTA в представлении классов или в обозревателе проектов. Любое из этих окон можно открыть из меню Вид. Можно добавить новую ссылку из меню Проект, из обозревателя проектов или из представления классов.

Взаимодействие с пакетом в задаче «Скрипт»

Задача "Скрипт" использует глобальный объект Dts , который является экземпляром ScriptObjectModel класса и его членами для взаимодействия с содержащим пакетом и средой выполнения служб Integration Services.

В следующей таблице представлены основные открытые элементы класса ScriptObjectModel, который представлен в коде задачи "Скрипт" через глобальный объект Dts. В этом разделе более подробно рассматривается использование этих элементов.

Элемент Характер использования
Connections Предоставляет доступ к диспетчерам соединений, определенным в пакете.
Events Предоставляет интерфейс событий, чтобы задача «Скрипт» могла инициировать ошибки, предупреждения и информационные сообщения.
ExecutionValue Предоставляет простой способ возвращения одного объекта в среду выполнения (в дополнение к TaskResult), который может также использоваться для ветвления рабочего процесса.
Log Записывает во включенные регистраторы данные, такие как ход выполнения задачи и результаты.
TaskResult Сообщает об успешном или неуспешном выполнении задачи.
Transaction Предоставляет транзакцию, если она имеется, в которой работает контейнер задачи.
Variables Предоставляет доступ к используемым в скрипте переменным, указанным в свойствах ReadOnlyVariables и ReadWriteVariables задачи.

Класс ScriptObjectModel содержит также некоторые открытые элементы, которые, вероятно, не будут использованы.

Элемент Description
VariableDispenser Свойство Variables предоставляет более удобный доступ к переменным. Хотя можно использовать VariableDispenser, необходимо явно вызывать методы для блокировки и разблокировки переменных для чтения и записи. Задача «Скрипт» прозрачно обрабатывает семантику блокировки при использовании свойства Variables.

Отладка задачи «Скрипт»

Чтобы выполнить отладку кода в задаче "Скрипт", установите по крайней мере одну точку останова в коде, а затем закройте интегрированную среду разработки VSTA для запуска пакета в SQL Server Data Tools (SSDT). Когда выполнение пакета входит в задачу «Скрипт», среда разработки VSTA IDE открывается повторно и отображает код в режиме только для чтения. После того как выполнение достигает точку останова, можно проверить значения переменных и выполнить оставшийся код в режиме пошагового выполнения.

Предупреждение

При выполнении пакета в 64-разрядном режиме задачу "Сценарий" невозможно отлаживать.

Примечание.

Для отладки задачи «Скрипт» необходимо выполнить пакет. Если выполняется только отдельная задача, точки останова в коде задачи «Скрипт» пропускаются.

Примечание.

Однако нельзя выполнять отладку задачи «Скрипт», если задача запускается как часть дочернего пакета, вызываемого задачей «Выполнение пакета». В этом случае точки останова, установленные в задаче «Скрипт» в дочернем пакете, пропускаются. Дочерний пакет можно нормально отладить, запустив его отдельно.

Примечание.

Во время отладки пакета, содержащего несколько задач «Скрипт», отладчик выполняет отладку одной задачи «Скрипт». Затем система может выполнять отладку другой задачи «Скрипт», если отладчик завершает работу, как в случае контейнера «цикл по элементам» или «цикл по каждому элементу».

Внешние ресурсы

См. также

Ссылки на другие сборки в решениях со сценариями
Настройка задачи «Скрипт» в редакторе задачи «Скрипт»