Carregando e executando um pacote local programaticamente

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Pode executar pacotes de Serviços de Integração conforme necessário ou em momentos pré-determinados, utilizando os métodos descritos em Pacotes em Execução. No entanto, com apenas algumas linhas de código, também pode executar um pacote a partir de uma aplicação personalizada, como uma aplicação Windows Forms, uma aplicação de consola, um formulário Web ASP.NET ou um serviço Web, ou um serviço Windows.

Este tópico discute:

  • Carregamento de um pacote programaticamente

  • Executar um pacote programaticamente

Todos os métodos usados neste tópico para carregar e executar pacotes requerem uma referência à Microsoft. Assembly SqlServer.ManagedDTS. Depois de adicionar a referência num novo projeto, importa o Microsoft.SqlServer.Dts.Runtime namespace com uma instrução using ou Imports .

Carregamento Programático de um Pacote

Para carregar um pacote programaticamente no computador local, quer o pacote esteja armazenado local ou remotamente, chame um dos seguintes métodos:

Localização de Armazenamento Método de Chamada
File LoadPackage
Loja de Pacotes SSIS LoadFromDtsServer
SQL Server LoadFromSqlServer

Importante

Os métodos da Application classe para trabalhar com a SSIS Package Store suportam apenas ".", localhost, ou o nome do servidor local. Não pode usar "(local)".

Executar um Pacote Programáticamente

Desenvolver uma aplicação personalizada em código gerido que execute um pacote no computador local requer a seguinte abordagem. Os passos aqui resumidos são demonstrados na aplicação de exemplo para consola que se segue.

Para executar um pacote no computador local programaticamente

  1. Inicia o ambiente de desenvolvimento Visual Studio e cria uma nova aplicação na tua linguagem de desenvolvimento preferida. Este exemplo utiliza uma aplicação de consola; no entanto, também pode executar um pacote a partir de uma aplicação Windows Forms, de um formulário ou serviço Web ASP.NET, ou de um serviço Windows.

  2. No menu Project, clique em Adicionar Referência e adicione uma referência a Microsoft.SqlServer.ManagedDTS.dll. Clique em OK.

  3. Use a instrução Visual Basic Imports ou a instrução C# using para importar a Microsoft. Espaço de nomes SqlServer.Dts.Runtime.

  4. Adicione o seguinte código na rotina principal. A aplicação de consola concluída deve assemelhar-se ao seguinte exemplo.

    Note

    O código de exemplo demonstra como carregar o pacote a partir do sistema de ficheiros usando o LoadPackage método. No entanto, também pode carregar o pacote a partir da base de dados MSDB chamando o LoadFromSqlServer método, ou do armazenamento de pacotes dos Serviços de Integração chamando o LoadFromDtsServer método.

  5. Execute o projeto. O código de exemplo executa o pacote de exemplo CalculatedColumns que está instalado com os exemplos do SQL Server. O resultado da execução do pacote é apresentado na janela da consola.

Código de Exemplo

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();  
    }  
  }  
}  

Captura de Eventos a partir de um Pacote em Execução

Quando executa um pacote programaticamente, como mostrado no exemplo anterior, pode também querer capturar erros e outros eventos que ocorrem à medida que o pacote é executado. Pode conseguir isto adicionando uma classe que herde da DefaultEvents classe e passando uma referência a essa classe quando carrega o pacote. Embora o exemplo seguinte capture apenas o OnError evento, há muitos outros eventos que a DefaultEvents classe permite capturar.

Executar um pacote no computador local programaticamente e capturar eventos do pacote

  1. Siga os passos do exemplo anterior para criar um projeto para este exemplo.

  2. Adicione o seguinte código na rotina principal. A aplicação de consola concluída deve assemelhar-se ao seguinte exemplo.

  3. Execute o projeto. O código de exemplo executa o pacote de exemplo CalculatedColumns que está instalado com os exemplos do SQL Server. O resultado da execução do pacote é apresentado na janela da consola, juntamente com quaisquer erros que ocorram.

Código de Exemplo

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();  
    }  
  }  
}