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.
Version imprimable
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:
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; } }