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.
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.
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
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).
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; } }
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager