Accueil > .Net, C#, Sql Server, SSIS > [C# 4 SSIS] Exécuter un package SSIS

[C# 4 SSIS] Exécuter un package SSIS

Qui n’a jamais rêver d’exécuter un package SSIS ?
Mouais…bref, c’est quand même parfois bien utile.
Notre utilisation de SSIS se résumais à consommer un fichier type CSV normé et de le mettre dans une base de données sans se taper le code à la main.

Déjà, il faut savoir que SSIS s’exécute toujours sur la machine ayant demander l’exécution du package.

Ce qui veut dire que même si vous avez un serveur SSIS et un serveur Web séparé, si le serveur Web doit exécuter un package SSIS, alors SSIS doit être installé sur le serveur Web.
Si ce n’est pas le cas, le monsieur renvoie une erreur ayant la description suivante : «To run a SSIS package outside of Business Intelligence Development Studio you must install Standard Edition of Integration Services or higher. »
Au moins, on peut difficilement faire plus clair…

Si SSIS ne peut pas être installé sur le serveur Web (dans mon exemple), alors il faut imaginer une autre solution. Pour nous, ça a été de créer une procédure stockée et d’exécuter le package depuis SQL Server via la commande xp_cmdshell (qui lance dtexec).
Ca donne plus ou moins ce résultat :

	-- CREATION DE LA LIGNE DE COMMANDE -----------------------
	set @cmdline = 'dtexec /sq Directory\<BDD>\<Nom_Package> /ser ' + @serveurSSIS
	set @cmdline = @cmdline + ' '
	set @cmdline = @cmdline + '/set \package.variables[CheminSource].Value;"\"'+@cheminSource+'\""'
	set @cmdline = @cmdline + ' '
--paramètres […]
	-- INTEGRATION DES DONNEES ---------------------------------
	-- Exécution du package SSIS d'intégration des données
	EXEC @return = xp_cmdshell @cmdline, no_output
	-- Retour du code erreur, 0 si OK
	select @return

Dans ce cas, il suffit de paramétrer un tout petit peu la procédure pour prendre en compte les paramètres souhaités.

Par contre, si on veut quand même lancer le code via C#, là, il y a encore un pré-requis : c’est la DLL Microsoft.SQLServer.ManagedDTS.dll qu’il faut référencer.
Sur notre serveur, elle se trouvait dans C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\.

Après, on peut enfin coder…

using Microsoft.SqlServer.Dts.Runtime;

public static string RunImportPackage(string InputFile, string SSISServer)
{
    StringBuilder str = new StringBuilder();
    Application app = new Application();
    Package package = app.LoadFromSqlServer(PackageName, SSISServer, null, null, null);
    package.Variables["CheminSource"].Value = InputFile;
    // parameters […]
    DTSExecResult result = package.Execute();
    if (result != DTSExecResult.Success)
    {
        for (int i = 0; i < package.Errors.Count; i++)
        {
            str.AppendLine(package.Errors[i].Description);
        }
    }
    else str.AppendLine("OK");
    return str.ToString();
}

Ici, le StringBuilder est uniquement utilisé pour remonter les erreurs dans le cadre d’une application de test. A voir ce qu’il est pertinent de remonter en fonction de la gestion d’erreur…

Catégories :.Net, C#, Sql Server, SSIS
  1. Aucun commentaire pour l’instant.
  1. 31/12/2012 à 16:04

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :