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


Программная загрузка и запуск локального пакета

Пакеты служб Integration Services можно выполнять по мере необходимости или в заранее определенное время с помощью методов, описанных в разделе Выполнение пакетов. Однако с помощью всего нескольких строк кода можно выполнить пакет из пользовательского приложения, такого как приложение Windows Forms, приложение командной строки, веб-форма ASP.NET, веб-служба или служба Windows.

В данном разделе рассматриваются следующие темы.

  • Программная загрузка пакета.

  • Программное выполнение пакета.

Все методы, используемые в данном разделе для загрузки и выполнения пакетов, требуют наличия ссылки на сборку Microsoft.SqlServer.ManagedDTS. После добавления ссылки в новый проект импортируйте пространство имен Microsoft.SqlServer.Dts.Runtime с помощью инструкции using или Imports.

Программная загрузка пакета

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

Место хранения

Вызываемый метод

Файл

LoadPackage

или

LoadPackage

Хранилище пакетов служб SSIS

LoadFromDtsServer

SQL Server

LoadFromSqlServer

Важное примечаниеВажно!

Методы класса Application для работы с хранилищем пакетов служб SSIS поддерживают только «.», localhost и имя сервера для локального сервера. Нельзя использовать имя «(local)».

Программное выполнение пакета

Разработка пользовательского приложения в управляемом коде, которое выполняет пакет на локальном компьютере, осуществляется следующим образом. Приведенные здесь шаги проиллюстрированы образцом приложения командной строки, приведенным далее.

Программное выполнение пакета на локальном компьютере

  1. Запустите среду разработки Visual Studio и создайте новое приложение на языке программирования по своему выбору. В этом образце используется приложение командной строки. Однако выполнить пакет можно также из приложения Windows Forms, веб-формы ASP.NET, веб-службы или службы Windows.

  2. Выберите в меню Проект пункт Добавить ссылку и добавьте ссылку на библиотеку Microsoft.SqlServer.ManagedDTS.dll. Нажмите ОК.

  3. Используйте инструкцию Visual Basic Imports или инструкцию C# using, чтобы импортировать пространство имен Microsoft.SqlServer.Dts.Runtime.

  4. Добавьте следующий код в подпрограмму main. В следующем примере представлен полный код приложения командной строки.

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

    Данный образец кода иллюстрирует загрузку пакета из файловой системы с помощью метода LoadPackage. Однако пакет можно загрузить также и из базы данных MSDB путем вызова метода LoadFromSqlServer или из пакета служб Integration Services путем вызова метода LoadFromDtsServer.

  5. Запустите проект. В образце кода выполняется пакет образца CalculatedColumns, который устанавливается вместе с образцами SQL Server. Результат выполнения пакета отображается в консольном окне.

Образец кода

Imports Microsoft.SqlServer.Dts.Runtime

Module Module1

  Sub Main()

    Dim pkgLocation As String
    Dim pkg As New Package
    Dim app As New Application
    Dim pkgResults As DTSExecResult

    pkgLocation = _
      "C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
      "\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
    pkg = app.LoadPackage(pkgLocation, Nothing)
    pkgResults = pkg.Execute()

    Console.WriteLine(pkgResults.ToString())
    Console.ReadKey()

  End Sub

End Module
using System;
using Microsoft.SqlServer.Dts.Runtime;

namespace RunFromClientAppCS
{
  class Program
  {
    static void Main(string[] args)
    {
      string pkgLocation;
      Package pkg;
      Application app;
      DTSExecResult pkgResults;

      pkgLocation =
        @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
        @"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
      app = new Application();
      pkg = app.LoadPackage(pkgLocation, null);
      pkgResults = pkg.Execute();

      Console.WriteLine(pkgResults.ToString());
      Console.ReadKey();
    }
  }
}

Перехват событий в выполняющемся пакете

Когда пакет запускается программно, как показано в предыдущем образце, может понадобиться также перехватить ошибки и другие события, возникающие по мере выполнения пакета. Это можно сделать, добавив класс, порожденный из класса DefaultEvents, и передав ссылку на этот класс при загрузке пакета. Хотя следующий пример перехватывает только событие OnError, существует много других событий, которые позволяет перехватывать класс DefaultEvents.

Программное выполнение пакета на локальном компьютере и перехват событий пакета

  1. Пройдите по шагам в предыдущем примере, чтобы создать проект для этого примера.

  2. Добавьте следующий код в подпрограмму main. В следующем примере представлен полный код приложения командной строки.

  3. Запустите проект. В образце кода выполняется пакет образца CalculatedColumns, который устанавливается вместе с образцами SQL Server. Результат выполнения пакета отображается в консольном окне вместе с сообщениями о любых возникших ошибках.

Образец кода

Imports Microsoft.SqlServer.Dts.Runtime

Module Module1

  Sub Main()

    Dim pkgLocation As String
    Dim pkg As New Package
    Dim app As New Application
    Dim pkgResults As DTSExecResult

    Dim eventListener As New EventListener()

    pkgLocation = _
      "C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
      "\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
    pkg = app.LoadPackage(pkgLocation, eventListener)
    pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)

    Console.WriteLine(pkgResults.ToString())
    Console.ReadKey()

  End Sub

End Module

Class EventListener
  Inherits DefaultEvents

  Public Overrides Function OnError(ByVal source As Microsoft.SqlServer.Dts.Runtime.DtsObject, _
    ByVal errorCode As Integer, ByVal subComponent As String, ByVal description As String, _
    ByVal helpFile As String, ByVal helpContext As Integer, _
    ByVal idofInterfaceWithError As String) As Boolean

    ' Add application–specific diagnostics here.
    Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description)
    Return False

  End Function

End Class
using System;
using Microsoft.SqlServer.Dts.Runtime;

namespace RunFromClientAppWithEventsCS
{
  class MyEventListener : DefaultEvents
  {
    public override bool OnError(DtsObject source, int errorCode, string subComponent, 
      string description, string helpFile, int helpContext, string idofInterfaceWithError)
    {
      // Add application-specific diagnostics here.
      Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description);
      return false;
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      string pkgLocation;
      Package pkg;
      Application app;
      DTSExecResult pkgResults;

      MyEventListener eventListener = new MyEventListener();

      pkgLocation =
        @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
        @"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
      app = new Application();
      pkg = app.LoadPackage(pkgLocation, eventListener);
      pkgResults = pkg.Execute(null, null, eventListener, null, null);

      Console.WriteLine(pkgResults.ToString());
      Console.ReadKey();
    }
  }
}
Значок служб Integration Services (маленький)Будьте в курсе новых возможностей cлужб Integration Services

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

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