2017-06-28 37 views
2

我有一个缓冲所有行的脚本组件,然后做一些处理,然后我想创建输出行。我试图访问PostExecute中的输出缓冲区对象,但显然这不可能?当它遇到AddRow()时,会导致“对象引用未设置为对象的实例”错误。有没有办法做到这一点?我可以将行添加到PostExecute中的SSIS脚本组件的输出缓冲区中吗?

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

    //processing 

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

是的,您只能访问'Input0_ProcessInputRow(Input0Buffer Row)'中的输出行。这可能看起来像一个问题,但总是有办法绕过它。我不明白你要在你的代码中做什么。 – TheEsnSiavashi

+0

您处于同步模式(默认)还是您将其转换为异步模式?脚本是作为转换还是目标创建的? – billinkc

+0

它是转换,它处于异步模式。有可能是一种解决方法,如果我可以添加到PostExecute的输出,它会更容易。也许如果我事先得到了行数,我想我会知道在ProcessInputRow中我在最后一行然后做最后的处理。 – Kelly

回答

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 
相关问题