J'ai un paquetage SSIS que je souhaiterais aussi passer des paramètres, ces paramètres proviendront d'une application .NET (VB ou C#) donc j'étais curieux de savoir si quelqu'un sait comment faire ça, ou mieux encore un site web avec conseils utiles sur la façon de le faire. Donc, fondamentalement, je veux exécuter un paquet SSIS à partir de .NET en passant les paramètres du paquetage SSIS qu'il peut utiliser à l'intérieur. Par exemple, le package SSIS utilisera l'importation de fichier plat dans une base de données SQL. Cependant, le chemin et le nom du fichier peuvent être le paramètre transmis depuis l'application .Net.Comment exécuter un package SSIS à partir de .NET?
Répondre
Voici comment définir les variables dans le package à partir du code -
using Microsoft.SqlServer.Dts.Runtime;
private void Execute_Package()
{
string pkgLocation = @"c:\test.dtsx";
Package pkg;
Application app;
DTSExecResult pkgResults;
Variables vars;
app = new Application();
pkg = app.LoadPackage(pkgLocation, null);
vars = pkg.Variables;
vars["A_Variable"].Value = "Some value";
pkgResults = pkg.Execute(null, vars, null, null, null);
if (pkgResults == DTSExecResult.Success)
Console.WriteLine("Package ran successfully");
else
Console.WriteLine("Package failed");
}
Merci @Craig! Cependant, 'Dts' est maintenant obsolète à partir de SQL Server 2008, comment pouvez-vous faire cela sans le paquet' Dts'? –
@IanCampbell Je suppose que vous faites référence à Microsoft.SqlServer.Dts.Runtime? Dts est juste le nom hérité de SSIS - c'est juste la déclaration de l'espace de noms. Le code ci-dessus est pris en charge à l'avenir. – Spikeh
@ Spikeh - ce qui me dérange, c'est que Microsoft dit que DTS est obsolète et "a été remplacé par SQL Server Integration Services": http://technet.microsoft.com/en-us/library/cc707786%28v=sql. 105% 29.aspx –
Pour ajouter à la réponse @Craig Schwarze,
Voici quelques liens MSDN liés:
Loading and Running a Local Package Programmatically:
Loading and Running a Remote Package Programmatically
C apturing événements d'un forfait de course:
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();
}
}
}
Voici comment faire pour avec le catalogue SSDB qui a été introduit avec SQL Server 2012 ...
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.IntegrationServices;
public List<string> ExecutePackage(string folder, string project, string package)
{
// Connection to the database server where the packages are located
SqlConnection ssisConnection = new SqlConnection(@"Data Source=.\SQL2012;Initial Catalog=master;Integrated Security=SSPI;");
// SSIS server object with connection
IntegrationServices ssisServer = new IntegrationServices(ssisConnection);
// The reference to the package which you want to execute
PackageInfo ssisPackage = ssisServer.Catalogs["SSISDB"].Folders[folder].Projects[project].Packages[package];
// Add a parameter collection for 'system' parameters (ObjectType = 50), package parameters (ObjectType = 30) and project parameters (ObjectType = 20)
Collection<PackageInfo.ExecutionValueParameterSet> executionParameter = new Collection<PackageInfo.ExecutionValueParameterSet>();
// Add execution parameter (value) to override the default asynchronized execution. If you leave this out the package is executed asynchronized
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "SYNCHRONIZED", ParameterValue = 1 });
// Add execution parameter (value) to override the default logging level (0=None, 1=Basic, 2=Performance, 3=Verbose)
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "LOGGING_LEVEL", ParameterValue = 3 });
// Add a project parameter (value) to fill a project parameter
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 20, ParameterName = "MyProjectParameter", ParameterValue = "some value" });
// Add a project package (value) to fill a package parameter
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 30, ParameterName = "MyPackageParameter", ParameterValue = "some value" });
// Get the identifier of the execution to get the log
long executionIdentifier = ssisPackage.Execute(false, null, executionParameter);
// Loop through the log and do something with it like adding to a list
var messages = new List<string>();
foreach (OperationMessage message in ssisServer.Catalogs["SSISDB"].Executions[executionIdentifier].Messages)
{
messages.Add(message.MessageType + ": " + message.Message);
}
return messages;
}
Le code est une légère adaptation de http://social.technet.microsoft.com/wiki/contents/articles/21978.execute-ssis-2012-package-with-parameters-via-net.aspx?CommentPosted=true#commentmessage
Il y a aussi un article similaire au http://domwritescode.com/2014/05/15/project-deployment-model-changes/
Où se trouve le fichier microsoft.sqlserver.management.integrationservices.dll? J'ai SQL2014 installé et ne peux pas le trouver en faisant une recherche de fenêtres. –
Apparemment, c'est seulement dans le GAC: [emplacement de l'assembly Microsoft.SqlServer.Management.IntegrationServices.dll] (http://muxtonmumbles.blogspot.com.au/2012/08/programmatically-executing-packages-in.html) –
Merci . Je l'ai. Cet endroit a fonctionné pour moi. –
- 1. Exécuter le package SSIS à partir de VB6
- 2. Pouvez-vous exécuter une tâche SSIS à partir de .net?
- 3. Comment faire pour exécuter un package SSIS à partir de Visual Basic 6?
- 4. Comment exécuter un script PowerShell à partir de SSIS
- 5. Comment transmettre des variables ou des paramètres à un package à partir de .NET?
- 6. package SSIS OnError Connexion
- 7. Impossible d'exécuter mon package SSIS
- 8. Déploiement d'un package SSIS
- 9. SSIS Package s'exécute à partir de Windows, mais échoue lors de l'exécution des jobs SQL Agent
- 10. Utilisation de SQL Server Agent pour exécuter un package SSIS distant par programme sur le serveur
- 11. Autorisations sur le package SSIS
- 12. Impossible d'exécuter SSIS PACKAGE par commandes DOS
- 13. Problèmes de temporisation de package SSIS
- 14. Ajout d'une variable de package à la sortie (SSIS)
- 15. package SSIS exécution en utilisant l'utilitaire dtexec
- 16. Exécuter un programme à partir de MemoryStream
- 17. Exécution du package SQL Server SSIS à partir de la procédure stockée
- 18. Appel d'un package SSIS à l'aide d'une application Web
- 19. Puis-je exécuter DBCC CHECKDB à partir de .NET?
- 20. Exécuter le script de connexion à partir de l'application .NET
- 21. Comment exécuter des procédures privées dans un package Oracle?
- 22. Ignorer les erreurs dans la tâche Exécuter le package dans SSIS
- 23. Comment faire une tâche FTP SSIS exécuter un script FTP plutôt que de télécharger un fichier?
- 24. Puis-je exécuter un package DTS SQL Server à partir d'un script Python?
- 25. Comment exécuter un test de sélénium (HTML) enregistré à partir de .NET
- 26. sp_FuzzyLookupTableMaintenanceInstall pas trouvé lors de l'exécution package SSIS
- 27. Exécution du package SSIS - Problème de mémoire insuffisante!
- 28. Comment intercepter des événements d'un package SSIS chargé en C#?
- 29. Création d'une erreur dans un package SSIS en fonction de la valeur de retour
- 30. Comment exécuter un programme externe à partir de Java?
Aux futurs lecteurs: Avant d'utiliser la solution ci-dessous, vérifiez vos licences. Je crois que cela ne fonctionne que sur les machines avec SSIS installé, pas seulement la référence DLL. Dans un environnement de production, l'installation de SSIS sans installer le moteur de base de données nécessite généralement une licence. –
[Exécution du package SSIS par programme] (http://blogs.msdn.com/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx) –
Est-ce que quelqu'un peut confirmer le commentaire de @ JohnSpiegel? Cela fonctionnera-t-il uniquement sur un environnement de production si SSIS est installé? –