Chargement et exécution d'un package local par programme
Vous pouvez exécuter des packages Integration Services selon vos besoins ou à des moments prédéterminés à l'aide des méthodes décrites dans Exécution de packages. Toutefois, quelques lignes de code vous suffisent pour exécuter également un package à partir d'une application personnalisée, telle qu'une application Windows Forms, une application console, un ASP.NET Web Form, un service Web ASP.NET ou un service Windows.
Cette rubrique traite des points suivants :
Chargement d'un package par programme
Exécution d'un package par programme
Toutes les méthodes utilisées dans cette rubrique pour charger et exécuter des packages requièrent une référence à l'assembly Microsoft.SqlServer.ManagedDTS. Après avoir ajouté la référence à un nouveau projet, importez l'espace de noms Microsoft.SqlServer.Dts.Runtime à l'aide d'une instruction using ou Imports.
Chargement d'un package par programme
Pour charger par programme un package sur l'ordinateur local, que le package soit stocké localement ou à distance, appelez l'une des méthodes suivantes :
Emplacement de stockage |
Méthode à appeler |
---|---|
Fichier |
ou |
Magasin de packages SSIS |
|
SQL Server |
Important
Les méthodes de la classe Application qui permettent d'utiliser le magasin de packages SSIS prennent uniquement en charge « . », localhost ou le nom du serveur local. Vous ne pouvez pas utiliser « (local) ».
Exécution d'un package par programme
Le développement d'une application personnalisée dans du code managé qui exécute un package sur l'ordinateur local requiert la procédure suivante. Les étapes résumées ci-dessous sont présentées dans l'exemple d'application console qui suit.
Pour exécuter par programme un package sur l'ordinateur local
Démarrez l'environnement de développement Visual Studio et créez une application dans votre langage de développement par défaut. Cet exemple utilise une application console. Cependant, vous pouvez également exécuter un package à partir d'une application Windows Forms, un ASP.NET Web Form, un service Web ASP.NET ou un service Windows.
Dans le menu Projet, cliquez sur Ajouter une référence, puis ajoutez une référence à Microsoft.SqlServer.ManagedDTS.dll. Cliquez sur OK.
Utilisez l'instruction Visual Basic Imports ou l'instruction C# using pour importer l'espace de noms Microsoft.SqlServer.Dts.Runtime.
Ajoutez le code suivant dans la routine principale. L'application console terminée doit ressembler à l'exemple suivant.
[!REMARQUE]
L'exemple de code montre le chargement du package à partir du système de fichiers à l'aide de la méthode LoadPackage. Toutefois, vous pouvez également charger le package à partir de la base de données MSDB en appelant la méthode LoadFromSqlServer, ou à partir du magasin de packages Integration Services en appelant la méthode LoadFromDtsServer.
Exécutez le projet. L'exemple de code exécute l'exemple de package CalculatedColumns installé avec les exemples SQL Server. Le résultat de l'exécution du package est affiché dans la fenêtre de la console.
Exemple de code
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();
}
}
}
Capture d'événements à partir d'un package en cours d'exécution
Lorsque vous exécutez un package par programme comme dans l'exemple précédent, vous pouvez également capturer les erreurs et les autres événements qui se produisent lors de l'exécution du package. Pour cela, vous devez ajouter une classe qui hérite de la classe DefaultEvents et passer une référence à cette classe lorsque vous chargez le package. Bien que l'exemple suivant capture uniquement l'événement OnError, la classe DefaultEvents vous permet de capturer de nombreux autres événements.
Pour exécuter par programme un package sur l'ordinateur local et capturer les événements du package
Suivez les étapes dans l'exemple précédent pour créer un projet à utiliser dans cet exemple.
Ajoutez le code suivant dans la routine principale. L'application console terminée doit ressembler à l'exemple suivant.
Exécutez le projet. L'exemple de code exécute l'exemple de package CalculatedColumns installé avec les exemples SQL Server. Le résultat de l'exécution du package est affiché dans la fenêtre de la console, avec toutes les erreurs qui se sont éventuellement produites.
Exemple de code
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();
}
}
}
|