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

Can I add rows to Output Buffer in SSIS Script Component in PostExecute?

我有一个脚本组件,我在其中缓冲所有行,然后进行一些处理,然后我想创建输出行。我尝试访问 PostExecute 中的输出缓冲区对象,但显然这是不可能的?当它命中 AddRow() 时给出 "Object Reference not set to an instance of an object" 错误。有办法吗?

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

    //processing

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

答案是否定的,你不能那样做,但简单的解决方案:添加 ProcessInput 函数以使用 ProcessInputRow 函数(已包含的函数)遍历每一行,并使用 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

感谢凯利的榜样。但是就像 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();
}