我正在尝试在 SSIS 中调试 dts 包。我有一个脚本组件设计器,我在其中传递输入变量以增加计数器。当我尝试 msgbox 计数器值时,我收到以下错误。
错误:0xC0202009 在 STAGING1 到 STAGING2,STAGING2 目标 [1056]:发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:“Microsoft SQL Native Client”Hresult:0x80040E14 描述:“无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。”。 OLE DB 记录可用。来源:“Microsoft SQL Native Client”Hresult:0x80040E14 描述:“链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供程序没有提供有关该错误的任何信息。”。 OLE DB 记录可用。来源:“Microsoft SQL Native Client”Hresult:0x80040E14 描述:“从 DTS 缓冲区读取超时。”。
以下是脚本组件设计器中的部分代码:
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Public Class ScriptMain
Inherits UserComponent
Dim iCounter As Integer
Dim iCurrentVal As Integer
Dim sCurrentOracleSeq As String
Dim sSeqName As String
Dim sSeqAltProcName As String
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
'
' Add your code here
'
Row.SEQIDNCASE = iCounter + iCurrentVal
iCounter += 1
MsgBox(iCounter + iCurrentVal, MsgBoxStyle.Information, "Input0")
End Sub
Public Overrides Sub PreExecute()
sCurrentOracleSeq = Me.Variables.VSEQIDCurVal
iCurrentVal = CInt(sCurrentOracleSeq)
MsgBox(iCurrentVal, MsgBoxStyle.Information, "No Title")
iCounter = 0
sSeqName = Me.Variables.VSEQIDName
sSeqAltProcName = Me.Variables.VSEQIDAlterProc
End Sub
Public Overrides Sub PostExecute()
Me.Variables.VSEQIDUpdateSQL = "Begin " & sSeqAltProcName & "('" & sSeqName & "'," & (iCounter + iCurrentVal) & "); End;"
End Sub
End Class
请注意,如果我注释掉有 Msgbox 的行,上面的代码部分工作得很好。