我可以在PostExecute的SSIS脚本组件中向输出缓冲区添加行吗?

时间:2017-06-28 14:56:37

标签: ssis script-component

我有一个脚本组件,我在其中缓冲所有行,然后进行一些处理,然后我想创建输出行。我尝试在PostExecute中访问输出缓冲区对象,但显然这是不可能的?当它到达AddRow()时,“对象引用未设置为对象的实例”错误。有没有办法做到这一点?

 public override void PostExecute()
{
    base.PostExecute();

    //processing

    foreach(ChartValue cv in chartValues)
    {
        Output0Buffer.AddRow();
        Output0Buffer.usedcl = cv.Centerline;
        //etc
    }           
}

2 个答案:

答案 0 :(得分:1)

答案是否定的,你可以做到这一点而不是简单的解决方案:使用ProcessInputRow函数(已包含的函数)添加ProcessInput函数来循环遍历每一行,并使用EndOfRowset知道何时完成,那么你可以做最后的处理代码。

public override void Input0_ProcessInput(Input0Buffer Buffer)
{
    base.Input0_ProcessInput(Buffer);

    try
    {
        //loop through each row
        while (Buffer.NextRow())
        {
             Input0_ProcessInputRow(Buffer);
        }

        //when done collecting all rows, do calculations
        if (Buffer.EndOfRowset())
        {
            CalculateResults();
        }
    }
    catch (Exception e)
    {
       //code here
    }
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{ 
     //gather each row's values and put into List for processing at the end

答案 1 :(得分:0)

感谢凯利的例子。但是就像H B所说,base.Input0_ProcessInput()每行都调用Input0_ProcessInputRow。在我的情况下,Buffer.EndOfRowset()始终为假。因此,我编写了较短的代码:

public override void Input0_ProcessInput(Input0Buffer Buffer)
{
    base.Input0_ProcessInput(Buffer); // operate rows in while loop

     //when done collecting all rows, do calculations
    CalculateResults();
}