2011-10-11 10 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 서브 루틴 중에는 스크립트 변환에서 변수를 수정할 수 없습니다.

다행히도, 다른 서브 루틴에서 수행 할 수있는 수정 유형이있는 것처럼 보입니다.

도널드 파머 (Donald Farmer)의 내 SSIS 스크립팅 베타 책은 수천 마일 떨어져 있으므로이 코드의 부정확성을 용서해주십시오. 중요한 것은 PostExecute 이벤트에서 user 변수에만 쓸 수 있다는 것입니다.

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 
관련 문제