Carregando e executando um pacote local programaticamente
Você pode executar pacotes do Integration Services quando necessário ou em horários predeterminados usando os métodos descritos em Pacotes em Execução. Entretanto, bastam algumas linhas de código para executar um pacote de um aplicativo personalizado, como, por exemplo, um aplicativo Windows Forms, um aplicativo do console, um formulário/serviço da Web ASP.NET ou um serviço do Windows.
Esse tópico discute:
Carregando um pacote programaticamente
Executando um pacote programaticamente
Todos os métodos usados nesse tópico para carregar e executar pacotes exigem uma referência ao assembly Microsoft.SqlServer.ManagedDTS. Depois de adicionar a referência em um projeto novo, importe o namespace Microsoft.SqlServer.Dts.Runtime com uma instrução using ou Imports.
Carregando um pacote programaticamente
Para carregar um pacote programaticamente no computador local, se o pacote for armazenado local ou remotamente, chame um destes métodos:
Local de armazenamento |
Método de chamada |
---|---|
Arquivo |
ou |
Armazenamento de Pacotes do SSIS |
|
SQL Server |
Importante |
---|
Os métodos da classe Application para trabalhar com o Armazenamento de Pacotes SSIS só dão suporte a ".", localhost ou ao nome do servidor local. Você não pode usar "(local)". |
Executando um pacote programaticamente
O desenvolvimento de um aplicativo personalizado em código gerenciado que executa um pacote no computador local requer a abordagem a seguir. As etapas resumidas aqui são demonstradas no exemplo de aplicativo de console a seguir.
Para 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. Esse exemplo usa um aplicativo de console; contudo, você também pode executar um pacote de um aplicativo Windows Forms, de um formulário/serviço da 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.
Adicione o código a seguir na rotina principal. O aplicativo de console completo deve ter a aparência do exemplo 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 armazenamento do pacote do Integration Services, chamando o método LoadFromDtsServer.
Execute o projeto. O código de exemplo executa o pacote de exemplo CalculatedColumns que é instalado com os exemplos 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 em execução
Quando você executar um pacote programaticamente, conforme mostrado no exemplo anterior, talvez também queira capturar erros e outros eventos que ocorram durante a execução 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 anterior para criar um projeto para esse exemplo.
Adicione o código a seguir na rotina principal. 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 que é instalado com os exemplos 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();
}
}
}
|