2011-10-11 113 views
1

我有一個名爲Valint,我需要在一個腳本任務,讀/寫變量,但它似乎並沒有工作:SSIS讀/寫變量腳本任務

public class scriptmain 
inherits usercomponent 

dim counter as integer 
dim Valint as integer 
..... 


Public sub new() 
counter = 0 
end sub 

public overrides sub input0_processintputrow(byval row as input0buffer) 
Dim vars as IDTSvariables100 = nothing 

Me.variableDispenser.lockforread("User::Valint") 
Me.variableDispenser.GetVariables(vars) 

counter = CType (vars("User:: Valint").Value, integer) 
vars.Unlock() 

counter +=1 

Me.VariableDispenser.LockoneForWrite("User::Valint", vars) 
vars("User::Valint").Value = counter 
vars.Unlock() 
End Sub 

對於某些原因我的輸出始終爲0

回答

1

這是在數據流任務中,是嗎?至少在processinputrow子例程期間,您不能在腳本轉換中修改變量。

幸運的是,您所做的修改似乎可以完成 - 只是在不同的子例程中。

我的SSIS Scripting由Donald Farmer編寫的書是距離我千里的,所以請原諒這段代碼的不精確。重要的是您只能從PostExecute事件寫入用戶變量。

public class scriptmain 
inherits usercomponent 

dim counter as integer 
dim Valint as integer 
..... 


Public sub new() 
counter = 0 
end sub 

public overrides sub input0_processintputrow(byval row as input0buffer) 
    counter +=1 
End Sub 

Public overrides sub PostExecute() 
    Dim vars as IDTSvariables100 = nothing 

    Me.variableDispenser.lockforread("User::Valint") 
    Me.variableDispenser.GetVariables(vars) 

    counter = CType (vars("User:: Valint").Value, integer) 
    vars.Unlock() 
    Me.VariableDispenser.LockoneForWrite("User::Valint", vars) 
    vars("User::Valint").Value = counter 
    vars.Unlock() 
End Sub