IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Lancer un package SSIS à partir de vb.net


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Lancer un package SSIS à partir de vb.net
    j'ai créé un package SSIS en utilisant SQL Server 2005, et j'aimerais lancer l'exécution de celui à partir d'une interface vb.net, et ce en cliquant sur un bouton. Donc, je ne sais pas comment le faire, si quelqu'un peut m'aider!! Merci par avance.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Voilà un bout de code d'une classe ExecutePackage qui exécute un package SSIS. Il est en C#, demande à un VerBiste de le traduire en VerBeux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Messaging;
    using Microsoft.SqlServer.Dts.Runtime;              // Managed Runtime namespace 
    using Microsoft.SqlServer.Dts.Pipeline.Wrapper;     // Pipeline Primary Interop Assembly  
    using wrap = Microsoft.SqlServer.Dts.Runtime.Wrapper;
    using System.Windows.Forms;
     
    public class ExecutePackage
        {
            private Package _package;                                // package object
            private MainPipe _dataFlow;                              // dataFlow task object
            private IDTSComponentMetaData90 _oledbSource;            // OLEDB dataFlow component object
            private IDTSComponentMetaData90 _dtsSort;                   // Sort transform dataFlow component object
            private IDTSComponentMetaData90 _flatFileDestination;    // FlatFile dataFlow component object
            private PackageEvents _packageEvents;            // class that implements the Package events interface IDTSEvents90
            private ComponentEvents _pipeLineEvents;         // class that implements the component events interface IDTSComponentEvents90
            private MessageQueue msmq;
            private string SSISMessageQueue = @".\SSISJobsResultsQueue";
     
            #region Constructor
     
            public ExecutePackage(string packageName)
            {
                Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
                _packageEvents = new PackageEvents();
                _package = app.LoadPackage(packageName, _packageEvents, true);
                initMessageQueue();
            }
     
            #endregion
     
            private void initMessageQueue()
            {
                try
                {
                    MessageQueue.Delete(SSISMessageQueue);
     
                }
                catch (Exception ex)
                {
     
                }
                msmq = new MessageQueue(SSISMessageQueue, QueueAccessMode.SendAndReceive);
                msmq.Label = "For exchange with SSIS Jobs";
            }
     
            private void showDtsErrors(string phase, DtsErrors dtsErrors)
            {
                if (dtsErrors != null && dtsErrors.Count > 0)
                {
                    StringBuilder packageErrors = new StringBuilder();
                    packageErrors.AppendLine("Errors in package during " + phase);
                    foreach (DtsError dtsError in dtsErrors)
                    {
                        packageErrors.Append(dtsError.ErrorCode);
                        packageErrors.Append(" - ");
                        packageErrors.AppendLine(dtsError.Description);
                    }
                    MessageBox.Show(packageErrors.ToString());
                }
            }
            public bool Run()
            {
     
                string currentDirectory = Directory.GetCurrentDirectory();
                System.Messaging.Message message = msmq.Peek();
     
                // Validate the layout of the package.            
                DTSExecResult status = _package.Validate(null, null, _packageEvents, null);
                if (status == DTSExecResult.Failure)
                {
                    showDtsErrors("Validation", _package.Errors);
                    return false;
                }
     
                // If the package validated successfully, then execute it.
     
                status = _package.Execute(null, null, _packageEvents, null, null);
                if (status == DTSExecResult.Failure)
                {
                    showDtsErrors("Execution", _package.Errors);
                }
                return (status == DTSExecResult.Success);
            }
     
            public string WaitForCompletion()
            {
                System.Messaging.Message message = msmq.Receive();
                string text = (string)message.Body;
                return text;
            }
        }
    La fin d'exécution se détecte de maniére un peu bourrin: le package envoi un message sur la file SSISJobsResultsQueue; bien entendu ceci peut être modifié (je t'ai donné l'exemple le plus élémentaire que j'ai sous la main - j'ai bien sur d'autres classes pour faire cela, mais elles sont beaucoup moins didactiques, car il y a beaucoup plus de fonctions supplémentaires).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/08/2015, 14h13
  2. Réponses: 6
    Dernier message: 29/08/2014, 19h33
  3. Réponses: 2
    Dernier message: 14/06/2010, 10h21
  4. Réponses: 1
    Dernier message: 25/09/2008, 17h52
  5. Créer un .bat pour lancer des requetes eu un package SSIS
    Par feragne dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/02/2008, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo