这真的是一个问题和一个答案。我试图弄清楚如何从 VB.NET 中打开一个 SSIS 包,然后从包中公开事件,以便我可以检查进度。我在网上找不到任何答案。事实证明,这很简单。
问问题
1969 次
1 回答
0
这是 Windows 窗体代码:
Private Sub loadSSISPackage(ByVal packageFile As String)
If file.Exists(packageFile) AndAlso packageFile.EndsWith(".dtsx") Then
Dim pkg As New Microsoft.SqlServer.Dts.Runtime.Package
Dim app As New Microsoft.SqlServer.Dts.Runtime.Application
Dim pkgResults As Microsoft.SqlServer.Dts.Runtime.DTSExecResult
pkg = app.LoadPackage(packageFile, Nothing)
Dim pkgEvents As New PackageEvents
pkgResults = pkg.Execute(Nothing, Nothing, pkgEvents, Nothing, Nothing)
MsgBox(pkgResults.ToString())
Else
Environment.Exit(-1)
End If
End Sub
这是我创建的类:
公共类 PackageEvents 实现 Microsoft.SqlServer.Dts.Runtime.IDTSEvents
Public Sub OnBreakpointHit(breakpointSite As Microsoft.SqlServer.Dts.Runtime.IDTSBreakpointSite, breakpointTarget As Microsoft.SqlServer.Dts.Runtime.BreakpointTarget) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnBreakpointHit
End Sub
Public Sub OnCustomEvent(taskHost As Microsoft.SqlServer.Dts.Runtime.TaskHost, eventName As String, eventText As String, ByRef arguments() As Object, subComponent As String, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnCustomEvent
End Sub
Public Function OnError(source As Microsoft.SqlServer.Dts.Runtime.DtsObject, errorCode As Integer, subComponent As String, description As String, helpFile As String, helpContext As Integer, idofInterfaceWithError As String) As Boolean Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnError
End Function
Public Sub OnExecutionStatusChanged(exec As Microsoft.SqlServer.Dts.Runtime.Executable, newStatus As Microsoft.SqlServer.Dts.Runtime.DTSExecStatus, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnExecutionStatusChanged
End Sub
Public Sub OnInformation(source As Microsoft.SqlServer.Dts.Runtime.DtsObject, informationCode As Integer, subComponent As String, description As String, helpFile As String, helpContext As Integer, idofInterfaceWithError As String, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnInformation
Debug.Print(CStr(informationCode))
Debug.Print(CStr(subComponent))
Debug.Print(CStr(description))
Debug.Print(CStr(helpFile))
Debug.Print(CStr(helpContext))
End Sub
Public Sub OnPostExecute(exec As Microsoft.SqlServer.Dts.Runtime.Executable, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnPostExecute
End Sub
Public Sub OnPostValidate(exec As Microsoft.SqlServer.Dts.Runtime.Executable, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnPostValidate
End Sub
Public Sub OnPreExecute(exec As Microsoft.SqlServer.Dts.Runtime.Executable, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnPreExecute
End Sub
Public Sub OnPreValidate(exec As Microsoft.SqlServer.Dts.Runtime.Executable, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnPreValidate
End Sub
Public Sub OnProgress(taskHost As Microsoft.SqlServer.Dts.Runtime.TaskHost, progressDescription As String, percentComplete As Integer, progressCountLow As Integer, progressCountHigh As Integer, subComponent As String, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnProgress
'Debug.Print(progressDescription)
'Debug.Print(CStr(taskHost.ExecutionStatus))
'Debug.Print(CStr(percentComplete))
'Debug.Print(CStr(progressCountLow))
'Debug.Print(CStr(progressCountHigh))
End Sub
Public Function OnQueryCancel() As Boolean Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnQueryCancel
End Function
Public Sub OnTaskFailed(taskHost As Microsoft.SqlServer.Dts.Runtime.TaskHost) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnTaskFailed
End Sub
Public Sub OnVariableValueChanged(DtsContainer As Microsoft.SqlServer.Dts.Runtime.DtsContainer, variable As Microsoft.SqlServer.Dts.Runtime.Variable, ByRef fireAgain As Boolean) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnVariableValueChanged
End Sub
Public Sub OnWarning(source As Microsoft.SqlServer.Dts.Runtime.DtsObject, warningCode As Integer, subComponent As String, description As String, helpFile As String, helpContext As Integer, idofInterfaceWithError As String) Implements Microsoft.SqlServer.Dts.Runtime.IDTSEvents.OnWarning
End Sub
结束类
请注意,一旦实现线被编码,所有的子将自动出现。现在可以捕获所有 SSIS 包事件!
显然,要在单独的线程上进行交叉编组以将 SSIS 事件信息发送到表单中,需要做一些工作,但那是另一回事了……
于 2013-07-19T09:36:04.183 回答