Share via


Executando um pacote SSIS programaticamente no computador local

Com apenas alguns linhas de código gerenciado e os pré-requisitos corretos no computador local, é possível executar um pacote a partir de um aplicativo personalizado. O aplicativo personalizado pode ser um aplicativo do Windows Forms, um aplicativo de console, um formulário da Web do ASP.NET, serviço Web ou um serviço do Windows.

ObservaçãoObservação

Para executar pacotes do Integration Services conforme necessário ou em horários predeterminados, use os métodos descritos no tópico Pacotes em execução.

Seções deste tópico

  • Pré-requisitos para o computador local

  • Criando um aplicativo que carrega e executa um pacote no computador local

    • Métodos que carregam um pacote

    • Método que executa o pacote

    • Exemplo

  • Capturando eventos de um pacote em execução

Pré-requisitos para o computador local

Um pacote é executado no mesmo computador do aplicativo que inicia o pacote. Por isso, quando um aplicativo carrega um pacote armazenado remotamente em outro computador, o pacote é executado no computador local.

Dessa forma, o carregamento e a execução de um pacote no computador local têm vários pré-requisitos:

  • Se o pacote contiver referências a recursos externos ao pacote, essas referências deverão ser válidas no computador local. Essas referências incluem cadeias de conexão, servidores, arquivos, filas de mensagens etc.

    ObservaçãoObservação

    Se o computador local não tiver referências válidas para os recursos externos ao pacote, não será possível executar o pacote no computador local. Em vez disso, você deve assegurar que o pacote seja executado no computador remoto. Para obter mais informações, consulte Executando um pacote SSIS programaticamente em um computador remoto.

  • Você deve ter todas as permissões que o pacote exige para acessar fontes de dados e outros recursos no ou do computador local.

  • Só é possível executar um pacote fora do ambiente de desenvolvimento, o Business Intelligence Development Studio, em um computador no qual o Integration Services foi instalado.

    ObservaçãoObservação

    Os termos do licenciamento do SQL Server talvez não permitam instalar o Integration Services em computadores adicionais. (O Integration Services é um componente de servidor, e não é redistribuível para computadores clientes ou locais.) Se o Integration Services não for e não puder ser instalado no computador local, você deverá assegurar que o pacote seja executado no computador remoto. Para obter mais informações, consulte Executando um pacote SSIS programaticamente em um computador remoto.

Criando um aplicativo que carrega e executa um pacote SSIS no computador local

Neste tópico, todos os métodos que carregam e executam pacotes programaticamente exigem uma referência ao assembly Microsoft.SqlServer.ManagedDTS. Depois de adicionar essa referência em um projeto novo, importe o namespace Microsoft.SqlServer.Dts.Runtime com uma instrução C# using ou uma instrução Visual Basic Imports.

Métodos que carregam um pacote SSIS

Para carregar um pacote programaticamente no computador local, independentemente do pacote ser armazenado local ou remotamente, chame um dos métodos da tabela a seguir: Todos estes métodos retornam um objeto Package que é possível usar para executar o pacote ou examinar as propriedades do pacote.

Local de armazenamento

Método de chamada

Arquivo

LoadPackage

—ou—

LoadPackage

Repositório de pacotes SSIS

LoadFromDtsServer

ObservaçãoObservação
Os métodos da classe Application para trabalhar com o repositório de pacotes SSIS só oferecem suporte a ".", localhost ou ao nome do servidor local. Você não pode usar "(local)".

SQL Server

LoadFromSqlServer

Método que executa o pacote SSIS

Para executar um pacote programaticamente no computador local, carregue o pacote conforme a descrição na seção anterior e, em seguida, chame o método Execute do pacote.

Exemplo

Use o procedimento a seguir para desenvolver um aplicativo personalizado em código gerenciado que carregue e execute um pacote no computador local. O procedimento a seguir é de um aplicativo console de exemplo que demonstra as etapas no procedimento.

Para carregar e executar um pacote programaticamente no computador local

  1. Inicie o ambiente de desenvolvimento do Visual Studio e crie um aplicativo novo no idioma de desenvolvimento de sua preferência.

    Este exemplo usa um aplicativo console. No entanto, também é possível executar um pacote de um aplicativo do Windows Forms, de um formulário/serviço Web ASP.NET ou de um serviço do Windows.

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

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

  4. Na rotina principal, adicione o código de exemplo que acompanha este procedimento.

    O aplicativo console completo deve ser semelhante ao código de exemplo na seção a seguir.

    ObservaçãoObservação

    O código de exemplo demonstra o carregamento do pacote do sistema de arquivos através do método LoadPackage. Mas você também pode carregar o pacote a partir do banco de dados msdb, chamando o método LoadFromSqlServer, ou a partir do repositório do pacote do Integration Services, chamando o método LoadFromDtsServer.

  5. Execute o projeto.

    O código de exemplo executa o pacote de exemplo CalculatedColumns instalado com os exemplos do SQL Server. O resultado da execução do pacote é exibido na janela de console.

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

Capturando eventos de um pacote SSIS em execução

Ao executar um pacote programaticamente, conforme mostrado na seção anterior, talvez você também queira capturar erros e outros eventos que ocorram durante as execuções do pacote. Para fazer isso, adicione uma classe herdada da classe DefaultEvents e passe uma referência para essa classe quando carregar o pacote. Embora o exemplo a seguir capture apenas o evento OnError, há vários outros eventos que a classe DefaultEvents permite que você capture.

Para executar um pacote programaticamente no computador local e capturar eventos de pacote

  1. Siga as etapas do exemplo na seção anterior para criar um projeto para esse exemplo.

  2. Na rotina principal, adicione o código de exemplo exibido após este procedimento.

    O aplicativo de console completo deve ter a aparência do exemplo a seguir.

  3. Execute o projeto.

    O código de exemplo executa o pacote de exemplo CalculatedColumns instalado com os exemplos do SQL Server. O resultado da execução do pacote é exibido na janela de console, junto com eventuais erros.

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();
    }
  }
}
Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os downloads, artigos, exemplos e vídeos da Microsoft mais recentes, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN:


Para receber uma notificação automática sobre essas atualizações, assine os RSS feeds disponíveis na página.