2017-06-28 41 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 
相關問題