Visual Studio 2017中SSIS脚本组件类型转换错误求助
解决SSIS异步Script Component的Buffer类型错误与空引用异常
问题根源
你在异步Script Component中错误地尝试直接获取并赋值Buffer对象,Me.ComponentMetaData.OutputCollection(0).Buffer返回的是缓冲区的整数ID,而非Output0Buffer类型实例,导致类型转换错误;后续移除该代码后,未初始化的outputBuffer变量又引发空引用异常。异步组件的输出行必须通过AddRow()方法创建,而非直接操作底层Buffer。
修正方案
- 保留Script Component的
Output 0的SynchronousInputID设为0(确保是异步输出模式) - 移除
PreExecute方法中错误的Buffer赋值代码 - 在
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
相关产品推荐
相关产品推荐

