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

После настройки задачи «Скрипт» в окне Редактор задачи «Скрипт» необходимо создать пользовательский код в среде разработки задачи «Скрипт».

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

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

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

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

ПримечаниеПримечание

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

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

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

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

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

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

  • Если задача «Скрипт» настроена для языка программирования Visual Basic 2010, класс 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 содержит также некоторые открытые элементы, которые, вероятно, не будут использованы.

Член

Описание

VariableDispenser

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

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

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

ПредупреждениеВнимание!

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

ПримечаниеПримечание

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

ПримечаниеПримечание

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

ПримечаниеПримечание

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

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

Значок служб Integration Services (маленький) Будьте в курсе новых возможностей служб Integration Services

Чтобы загрузить последнюю документацию, статьи, образцы и видеоматериалы Майкрософт, а также лучшие решения участников сообщества, перейдите на страницу служб Службы Integration Services на сайте MSDN.


Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.

См. также

Справочник

Ссылки на другие сборки в решениях со сценариями

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