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çã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
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çã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çã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 |
—ou— |
Repositório de pacotes SSIS |
Observaçã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 |
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
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.
No menu Projeto, clique em Adicionar Referência e adicione uma referência ao Microsoft.SqlServer.ManagedDTS.dll. Clique em OK.
Use a instrução Imports do Visual Basic ou a instrução using de C# para importar o namespace Microsoft.SqlServer.Dts.Runtime.
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çã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.
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
Siga as etapas do exemplo na seção anterior para criar um projeto para esse exemplo.
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.
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();
}
}
}
|