Hi there
I have a a global variable for the package.
Now in script task of data flow I am trying to assign some value to it.
I have also defined same variable in Read/Write property of script task.
But at run time it gives me following error:
"The collection of variables locked for read and write access is not available outside of PostExecute."
How do we resolve this?
Thanks and Regards
Rahul Kumar
And in which overrided Sub are you trying to access this variable?
-Tom
|||Hi Tom
I am doing all this in
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
|||Try this:
Public Overloads Overrides Sub ProcessInput(ByVal inputID As Integer, ByVal buffer As PipelineBuffer)
If Buffer Is Nothing Then
Throw New ArgumentNullException("buffer")
End If
Dim vars As IDTSVariables90
Dim varServerName As IDTSVariable90
Dim varPackageName As IDTSVariable90
....
Try
...
Me.VariableDispenser.LockForRead("ServerName")
...
Me.VariableDispenser.GetVariables(vars)
varServerName = vars.Item(0) (0 because this was the first variable you've locked)
...
catch ....
|||You can find lots of examples by just typing in msnsearch "using variable in script component"
like for example:
http://msdn2.microsoft.com/en-us/library/aa337079.aspx
-Tom
|||Tom, your code sample is not actually for a Script Component, rather a full custom component.
Rahul, to be clear, when using the variable lock lists provide in the UI of the the Script Component you cannot access variables in the process input member (MyBuffer_ProcessInputRow). You can access read-only variables in the PreExecute and read-write variables in PostExecute
From the BOL link in Tom's second post -
If you do the locking yourself though you get more control. Try this sample code, but create the variables first if you try and run it.
Public Class ScriptMain
Inherits UserComponent
Private counter As Integer
Public Overrides Sub PreExecute()
' Initialise Counter from RO variable
counter = Me.Variables.VariableRO
MyBase.PreExecute()
End Sub
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
' Increment Counter
counter = counter + 1
' Use manual locking to set variable in Process Input
Dim variables As IDTSVariables90
Me.VariableDispenser.LockOneForRead("VariableRWManual", variables)
variables(0).Value = 125
variables.Unlock()
End Sub
Public Overrides Sub PostExecute()
' Store updated counter in RW variable
Me.Variables.VariableRW = counter
' Set a value for testing using manual locking
Dim variables As IDTSVariables90
Me.VariableDispenser.LockOneForRead("Variable", variables)
variables(0).Value = 5
variables.Unlock()
MyBase.PostExecute()
End Sub
End Class
|||Hi Darren
Great Help!! thanks,
I got my work done.
Regards
Rahul Kumar,Software Engineer,India
sql
No comments:
Post a Comment