Programmatisch een lokaal pakket laden en uitvoeren

Van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

Je kunt Integration Services-pakketten uitvoeren wanneer dat nodig is of op vooraf bepaalde tijden door gebruik te maken van de methoden beschreven in Running Packages. Met slechts een paar regels code kun je echter ook een pakket uitvoeren vanuit een aangepaste applicatie, zoals een Windows Forms-applicatie, een consoleapplicatie, een ASP.NET webformulier of webservice, of een Windows-service.

Dit onderwerp bespreekt:

  • Een pakket programmatisch laden

  • Een pakket programmatisch uitvoeren

Alle methoden die in dit onderwerp worden gebruikt om pakketten te laden en uit te voeren, vereisen een verwijzing naar Microsoft. SqlServer.ManagedDTS assembly. Na het toevoegen van de referentie in een nieuw project, importeer je de Microsoft.SqlServer.Dts.Runtime naamruimte met een using of Imports-instructie .

Een pakket programmatisch laden

Om een pakket programmatisch op de lokale computer te laden, of het nu lokaal of op afstand is opgeslagen, roep een van de volgende methoden aan:

Opslaglocatie Methode om te roepen
Bestand LoadPackage
SSIS Package Store LoadFromDtsServer
SQL Server LoadFromSqlServer

Important

De methoden van de Application klasse voor het werken met de SSIS Package Store ondersteunen alleen ".", localhost of de servernaam van de lokale server. Je kunt "(lokaal)" niet gebruiken.

Een pakket programmatisch uitvoeren

Het ontwikkelen van een aangepaste applicatie in beheerde code die een pakket draait op de lokale computer vereist de volgende aanpak. De hier samengevat stappen worden gedemonstreerd in de voorbeeldapplicatie van de console die volgt.

Om een pakket programmatisch op de lokale computer te draaien

  1. Start de Visual Studio-ontwikkelomgeving en maak een nieuwe applicatie in je favoriete ontwikkeltaal. Dit voorbeeld gebruikt een console-applicatie; je kunt echter ook een pakket draaien vanuit een Windows Forms-applicatie, een ASP.NET-webformulier of webservice, of een Windows-service.

  2. Klik in het menu Project op Referentie toevoegen en voeg een referentie toe aan Microsoft.SqlServer.ManagedDTS.dll. Klik op OK.

  3. Gebruik de Visual Basic Imports-instructie of de C#-instructie om de Microsoft-instructie te importeren. SqlServer.Dts.Runtime naamruimte.

  4. Voeg de volgende code toe aan de hoofdroutine. De voltooide console-applicatie zou er als volgt uit moeten zien.

    Note

    De voorbeeldcode laat zien dat het pakket vanuit het bestandssysteem wordt geladen met behulp van de methode LoadPackage . Je kunt het pakket echter ook laden uit de MSDB-database door de LoadFromSqlServer methode aan te roepen, of vanuit de Integration Services-pakketopslag door de LoadFromDtsServer methode aan te roepen.

  5. Voer het project uit. De voorbeeldcode voert het voorbeeldpakket CalculatedColumns uit dat wordt geïnstalleerd met de SQL Server-voorbeelden. Het resultaat van pakketuitvoering wordt weergegeven in het consolevenster.

Voorbeeldcode

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();  
    }  
  }  
}  

Gebeurtenissen vastleggen uit een lopend pakket

Wanneer je een pakket programmatisch uitvoert zoals getoond in het voorgaande voorbeeld, wil je misschien ook fouten en andere gebeurtenissen vastleggen die optreden tijdens het uitvoeren van het pakket. Je kunt dit bereiken door een klasse toe te voegen die van de DefaultEvents klasse erft, en door een referentie naar die klasse door te geven wanneer je het pakket laadt. Hoewel het volgende voorbeeld alleen het OnError evenement vastlegt, zijn er veel andere evenementen die de DefaultEvents klasse je laat vastleggen.

Om een pakket programmatisch op de lokale computer uit te voeren en pakketgebeurtenissen vast te leggen

  1. Volg de stappen in het voorgaande voorbeeld om een project voor dit voorbeeld te maken.

  2. Voeg de volgende code toe aan de hoofdroutine. De voltooide console-applicatie zou er als volgt uit moeten zien.

  3. Voer het project uit. De voorbeeldcode voert het voorbeeldpakket CalculatedColumns uit dat wordt geïnstalleerd met de SQL Server-voorbeelden. Het resultaat van pakketuitvoering wordt weergegeven in het consolevenster, samen met eventuele fouten die optreden.

Voorbeeldcode

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();  
    }  
  }  
}