2011-10-11 144 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