0

这真的是一个问题和一个答案。我试图弄清楚如何从 VB.NET 中打开一个 SSIS 包,然后从包中公开事件,以便我可以检查进度。我在网上找不到任何答案。事实证明,这很简单。

4

1 回答 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 回答