Quelle est la manière préférée d'exécuter SQL dans une tâche SSIS personnalisée?

J'écris une tâche SSIS personnalisée qui, comme l'une de ses fonctions, devrait exécuter une procédure stockée sur une connection à une database. Je n'arrive pas à find d'informations sur la façon dont cela est fait.

J'utilise un gestionnaire de connection ADO.NET pour me connecter à la database et je souhaite écrire ma tâche en C #.

Quelle est la manière préférée d'exécuter SQL dans une tâche SSIS personnalisée?

La réponse à cette question dépend un peu du gestionnaire de connection que vous utilisez pour vous connecter à la database, mais l'approche générale est la même:

  1. Obtenez le gestionnaire de connections approprié dans votre tâche personnalisée à l'aide de la propriété Connections de l'object Package .
  2. Appelez la méthode AcquireConnection sur le gestionnaire de connections pour get une connection à votre database.
  3. Exécutez vos instructions SQL à l'aide de la connection fournie.

Cette approche vous permet de profiter de la configuration et de la gestion des connections fournies par SSIS.

Pour un gestionnaire de connections ADO.NET, le code suivant peut être utilisé:

 public override DTSExecResult Validate( Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log) { // Validate connection exists. if(!connections.Contains("YourConnection")) { componentEvents.FireError(0, "CustomTask", "Invalid connection manager.", "", 0); return DTSExecResult.Failure; } return DTSExecResult.Success; } public override DTSExecResult Execute(Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log, object transaction) { ConnectionManager cm = connections["YourConnection"]; try { SqlConnection connection = cm.AcqureConnection(transaction) as SqlConnection; if(connection == null) { componentEvents.FireError(0, "CustomTask", "Failed to acquire ADO.NET connection.", "", 0); Return DTSExecResult.Failure; } // TODO: Use connection to execute SQL. } catch(Exception ex) { componentEvents.FireError(0, "CustomTask", ex.Message, "", 0); Return DTSExecResult.Failure; } } 

Vous aurez besoin d'une meilleure gestion des erreurs et je ne suis pas sûr de savoir comment gérer la durée de vie de la connection, que vous deviez l'ouvrir manuellement ou la jeter après utilisation.

Bonne chance!