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

  • Crear una aplicación que cargue y ejecute un paquete en el equipo local

    • Métodos que cargan un paquete

    • Método que ejecuta el paquete

    • Ejemplo

  • Capturar eventos de un paquete en ejecución

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

LoadPackage

O bien

LoadPackage

Almacén de paquetes SSIS

LoadFromDtsServer

NotaNota
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

LoadFromSqlServer

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

  1. 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.

  2. En el menú Proyecto, haga clic en Agregar referencia y agregue una referencia a Microsoft.SqlServer.ManagedDTS.dll. Haga clic en Aceptar.

  3. 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.

  4. 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.

  5. 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

  1. Siga los pasos del ejemplo de la sección anterior para crear un proyecto para este ejemplo.

  2. 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.

  3. 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();
    }
  }
}
Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las descargas, artículos, ejemplos y vídeos más recientes de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN:


Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.