Ejecutar un paquete de SSIS mediante programación en el equipo local
Con solo unas líneas de código administrado y los requisitos previos correctos en el equipo local, puede ejecutar un paquete desde una aplicación personalizada. La aplicación personalizada puede ser una aplicación de Windows Forms, una aplicación de consola, Web Forms o un servicio web de ASP.NET, o un servicio de Windows.
Nota
Para ejecutar paquetes de Integration Services cuando sea necesario o en momentos predeterminados, use los métodos descritos en el tema Ejecutar paquetes.
Secciones de este tema
|
Requisitos previos del equipo local
Un paquete se ejecuta en el mismo equipo que la aplicación que lo inicia. Así, cuando una aplicación carga un paquete almacenado de forma remota en otro equipo, el paquete se ejecuta en el equipo local.
En consecuencia, la carga y ejecución de un paquete en el equipo local exige varios requisitos previos:
Si el paquete contiene referencias a recursos externos al paquete, dichas referencias deben ser válidas en el equipo local. Son referencias las cadenas de conexión, servidores, archivos, colas de mensajes, etc.
Nota
Si el equipo local no tiene referencias válidas a los recursos externos al paquete, no se puede ejecutar el paquete en el equipo local. En lugar de ello, debe asegurarse de que el paquete se ejecuta en el equipo remoto. Para obtener más información, vea Ejecutar un paquete de SSIS mediante programación en un equipo remoto.
Debe tener todos los permisos que el paquete exige para tener acceso a los orígenes de datos y otros recursos en equipo local o desde él.
Solo puede ejecutar un paquete fuera del entorno de desarrollo, Business Intelligence Development Studio, en un equipo con Integration Services instalado.
Nota
Las condiciones de su licencia de SQL Server podrían no permitirle instalar Integration Services en equipos adicionales. (Integration Services es un componente de servidor y no se puede distribuir entre equipos cliente o locales.) Si Integration Services no está instalado, y no se puede instalar en el equipo local, debe asegurarse de que el paquete se ejecuta en el equipo remoto. Para obtener más información, vea Ejecutar un paquete de SSIS mediante programación en un equipo remoto.
Crear una aplicación que cargue y ejecute un paquete SSIS en el equipo local
En este tema, todos los métodos que cargan y ejecutan paquetes mediante programación requieren una referencia al ensamblado Microsoft.SqlServer.ManagedDTS. Después de agregar esta referencia a un nuevo proyecto, importe el espacio de nombres Microsoft.SqlServer.Dts.Runtime con una instrucción using de C# o una instrucción Imports de Visual Basic.
Métodos que cargan un paquete de SSIS
Para cargar un paquete mediante programación en el equipo local, tanto si el paquete está almacenado localmente como remotamente, llame a uno de los métodos de la siguiente tabla: Todos estos métodos devuelven un objeto Package, que se puede utilizar para ejecutar el paquete o examinar sus propiedades.
Ubicación de almacenamiento |
Método que se llama |
---|---|
Archivo |
O bien |
Almacén de paquetes SSIS |
Nota
Los métodos de la clase Application para trabajar con el almacén de paquetes SSIS solo admiten ".", localhost o el nombre del servidor local. No puede utilizar "(local)".
|
SQL Server |
Método que ejecuta el paquete de SSIS
Para ejecutar un paquete en el equipo local mediante programación, cargue el paquete tal y como se describe en la sección anterior y, a continuación, llame al método Execute del paquete.
Ejemplo
Use el siguiente procedimiento para desarrollar una aplicación personalizada en código administrado que cargue y ejecute un paquete en el equipo local. A continuación se ofrece un ejemplo de aplicación de consola que indica los pasos del procedimiento.
Para cargar y ejecutar un paquete mediante programación en el equipo local
Inicie el entorno de desarrollo de Visual Studio y cree una nueva aplicación en su lenguaje de desarrollo preferido.
En este ejemplo se utiliza una aplicación de consola. Sin embargo, también puede ejecutar un paquete de una aplicación de Windows Forms, un formulario Web Forms o servicio web ASP.NET o un servicio de Windows.
En el menú Proyecto, haga clic en Agregar referencia y agregue una referencia a Microsoft.SqlServer.ManagedDTS.dll. Haga clic en Aceptar.
Utilice la instrucción Imports de Visual Basic o la instrucción using de C# para importar el espacio de nombres Microsoft.SqlServer.Dts.Runtime.
En la rutina principal, agregue el ejemplo de código que sigue a este procedimiento.
La aplicación de consola completada se debe parecer al ejemplo de código de la sección siguiente.
Nota
En el código de ejemplo se muestra cómo cargar el paquete desde el sistema de archivos mediante el método LoadPackage. No obstante, también puede cargar el paquete desde la base de datos msdb mediante una llamada al método LoadFromSqlServer o bien desde el almacén de paquetes de Integration Services mediante una llamada al método LoadFromDtsServer.
Ejecute el proyecto.
En el código se ejecuta el paquete de ejemplo CalculatedColumns que se instala con los ejemplos de SQL Server. El resultado de la ejecución del paquete se muestra en la ventana de la consola.
Código de ejemplo
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();
}
}
}
Capturar eventos de un paquete en ejecución de SSIS
Al ejecutar un paquete mediante programación tal como se muestra en la sección anterior, también puede capturar los errores y otros eventos que se producen cuando se ejecuta el paquete. Para ello, agregue una clase que herede de la clase DefaultEvents y pase una referencia a dicha clase al cargar el paquete. Aunque en el ejemplo siguiente solamente se captura el evento OnError, hay muchos otros eventos que la clase DefaultEvents permite capturar.
Para ejecutar un paquete mediante programación en el equipo local y capturar los eventos del paquete
Siga los pasos del ejemplo de la sección anterior para crear un proyecto para este ejemplo.
En la rutina principal, agregue el ejemplo de código que sigue a este procedimiento.
La aplicación de consola completada se debe parecer al ejemplo siguiente.
Ejecute el proyecto.
En el código se ejecuta el paquete de ejemplo CalculatedColumns que se instala con los ejemplos de SQL Server. El resultado de la ejecución del paquete se muestra en la ventana de la consola, junto con cualquier error que se produzca.
Código de ejemplo
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();
}
}
}
|