Exécution d'un package SSIS par programme sur un ordinateur local
Quelques lignes de code managé et le respect des conditions préalables sur l'ordinateur local suffisent pour pouvoir exécuter un package à partir d'une application personnalisée. L'application personnalisée peut être une application de Windows Forms, une application console, un formulaire de Web ASP.NET, un service Web ou un service Windows.
Notes
Pour exécuter des packages Integration Services selon vos besoins ou à des moments prédéterminés, utilisez les méthodes décrites dans la rubrique Exécution des packages.
Rubriques de cette section
|
Conditions préalables pour l'ordinateur local
Un package s'exécute sur le même ordinateur que l'application qui le lance. Donc, lorsqu'une application charge un package stocké à distance sur un autre ordinateur, le package s'exécute sur l'ordinateur local.
Par conséquent, le chargement et l'exécution d'un package sur l'ordinateur local ont plusieurs conditions préalables :
Si le package contient des références aux ressources qui sont externes au package, ces références doivent être valides sur l'ordinateur local. Ces références incluent des chaînes de connexion, des serveurs, des fichiers, files d'attente de messages, etc.
Notes
Si l'ordinateur local n'a pas de références valides aux ressources qui sont externes au package, vous ne pouvez pas exécuter le package sur l'ordinateur local. À la place, vous devez vous assurer que le package s'exécute sur l'ordinateur distant. Pour plus d'informations, consultez Exécution d'un package SSIS par programme sur un ordinateur distant.
Vous devez avoir toutes les autorisations que le package requiert pour accéder aux sources de données et autres ressources de l'ordinateur local.
Vous pouvez exécuter un package à l'extérieur de l'environnement de développement, Business Intelligence Development Studio uniquement sur un ordinateur sur lequel Integration Services est installé.
Notes
Les termes de votre licence SQL Server peuvent ne pas vous autoriser à installer Integration Services sur des ordinateurs supplémentaires. (Integration Services est un composant serveur et n'est pas redistribuable aux ordinateurs clients ou locaux.) Si Integration Services n'est pas et ne peut pas être installé sur l'ordinateur local, vous devez vous assurer que le package s'exécute sur l'ordinateur distant. Pour plus d'informations, consultez Exécution d'un package SSIS par programme sur un ordinateur distant.
Création d'une application qui charge et exécute un package SSIS sur l'ordinateur local
Dans cette rubrique, toutes les méthodes utilisées pour charger et exécuter des packages par programme requièrent une référence à l'assembly Microsoft.SqlServer.ManagedDTS. Après avoir ajouté cette référence dans un nouveau projet, importez l'espace de noms Microsoft.SqlServer.Dts.Runtime avec une instruction C# using ou une instruction Imports Visual Basic.
Méthodes qui chargent un package SSIS
Pour charger par programme un package sur l'ordinateur local, que le package soit stocké localement ou à distance, appelez une des méthodes de la table suivante : Toutes ces méthodes retournent un objet Package, que vous pouvez utiliser ensuite pour exécuter le package ou examiner les propriétés du package.
Emplacement de stockage |
Méthode à appeler |
---|---|
Fichier |
- ou - |
Magasin de packages SSIS |
Remarque
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) ».
|
SQL Server |
Méthode qui exécute le package SSIS
Pour exécuter un package par programme sur l'ordinateur local, chargez le package comme décrit dans la section précédente, puis appelez la méthode Execute du package.
Exemple
Utilisez la procédure suivante pour développer une application personnalisée dans du code managé qui charge et exécute un package sur l'ordinateur local La procédure est suivie d'un exemple d'application console qui montre les étapes de la procédure.
Pour charger et exécuter un package par programme 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.
Dans la routine principale, ajoutez l'exemple de code qui suit cette procédure.
L'application console terminée doit ressembler à l'exemple de code dans la section suivante.
Notes
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 SSIS en cours d'exécution
Lorsque vous exécutez un package par programme comme dans l'exemple de la section précédente, 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 de la section précédente pour créer un projet à utiliser dans cet exemple.
Dans la routine principale, ajoutez l'exemple de code qui suit cette procédure.
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();
}
}
}
|