You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017中SSIS脚本组件类型转换错误求助

解决SSIS异步Script Component的Buffer类型错误与空引用异常

问题根源

你在异步Script Component中错误地尝试直接获取并赋值Buffer对象,Me.ComponentMetaData.OutputCollection(0).Buffer返回的是缓冲区的整数ID,而非Output0Buffer类型实例,导致类型转换错误;后续移除该代码后,未初始化的outputBuffer变量又引发空引用异常。异步组件的输出行必须通过AddRow()方法创建,而非直接操作底层Buffer。

修正方案

  1. 保留Script Component的Output 0的SynchronousInputID设为0(确保是异步输出模式)
  2. 移除PreExecute方法中错误的Buffer赋值代码
  3. 在Input0_ProcessInputRow方法中,先调用Output0Buffer.AddRow()创建新输出行,再为各列赋值

修正后的完整代码

<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute>
<CLSCompliant(False)>
Public Class ScriptMain
    Inherits UserComponent

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        Dim id As String = ""

        Select Case Row.PivotKeyValue.ToString()
            Case "Column 1"
                id = "Value1"
            Case "Column 2"
                id = "Value 2"
            Case "Column 3"
                id = "Value 3"
            ' 补充剩余11组列值映射
        End Select

        ' 创建新的输出行
        Output0Buffer.AddRow()
        ' 为输出列赋值
        Output0Buffer.ID = id
        Output0Buffer.Measure = Row.Measure
        Output0Buffer.Date = Row.CopyofDate
        Output0Buffer.Time = Row.CopyofTime
        Output0Buffer.PivotKeyValue = Row.PivotKeyValue
    End Sub
End Class

关键说明

  • 异步Script Component不允许直接获取Buffer实例,必须通过AddRow()方法生成新输出行,这是SSIS组件模型的强制要求
  • 自动生成的Output0Buffer类已经封装了对输出缓冲区的操作,直接调用其方法和属性即可
  • 确保Script Component的输入列已全部勾选为可读,输出列的类型与目标表列类型匹配

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:15:00