Cargar y ejecutar un paquete local mediante programación

Puede ejecutar paquetes de Integration Services según sea necesario o en momentos predeterminados mediante los métodos descritos en Ejecutar paquetes. Sin embargo, con sólo unas líneas de código, también puede ejecutar un paquete desde una aplicación personalizada como una aplicación de Windows Forms, una aplicación de consola, un formulario Web Forms o servicio Web ASP.NET o un servicio de Windows.

En este tema se describe:

  • Cargar un paquete mediante programación

  • Ejecutar un paquete mediante programación

Todos los métodos utilizados en este tema para cargar y ejecutar paquetes requieren una referencia al ensamblado Microsoft.SqlServer.ManagedDTS. Después de agregar la referencia en un proyecto nuevo, importe el espacio de nombres Microsoft.SqlServer.Dts.Runtime con una instrucción using o Imports.

Cargar un paquete mediante programación

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 siguientes:

Ubicación de almacenamiento

Método que se llama

Archivo

LoadPackage

o bien

LoadPackage

Almacén de paquetes SSIS

LoadFromDtsServer

SQL Server

LoadFromSqlServer

Nota importanteImportante

Los métodos de la clase Application para trabajar con el almacén de paquetes SSIS sólo admiten ".", localhost o el nombre del servidor local. No puede utilizar "(local)".

Ejecutar un paquete mediante programación

Al desarrollar una aplicación personalizada en código administrado que ejecuta un paquete en el equipo local, se requiere el enfoque siguiente. Los pasos resumidos aquí se muestran en la aplicación de consola de ejemplo que figura a continuación.

Para 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. Agregue el código siguiente en la rutina principal. La aplicación de consola completada se debe parecer al ejemplo 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

Al ejecutar un paquete mediante programación tal como se muestra en el ejemplo 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 sólo 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 anterior para crear un proyecto para este ejemplo.

  2. Agregue el código siguiente en la rutina principal. 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 más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

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