0

我正在尝试在 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 的行,上面的代码部分工作得很好。

4

1 回答 1

0

这真的是 SSIS 中的 DTS 任务吗?只是确保。

如果是这样,您是否考虑过在 SSIS 脚本任务中重写并利用 BIDS 中的断点?

也许您应该尝试通过 SSMS > Management > Legacy 访问 DTS 包,然后从那里进行故障排除 - 如果可能的话,将 BIDS 排除在外。

于 2009-08-04T22:59:16.303 回答