其他分享
首页 > 其他分享> > CodeGo.net>如何将列值存储到数据流任务中的变量?

CodeGo.net>如何将列值存储到数据流任务中的变量?

作者:互联网

我有DFT,在这里我从表中提取URL,并且需要将该值存储到变量中.

我正在使用OLEDB Source连接到My SQL Server并选择所需的列.
然后我有条件拆分,它将为我拆分正确的URL.
来自条件拆分的正确URL流已映射到脚本组件.

以下是我使用的C#代码:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    this.ReadWriteVariables["User::NextPageLink"].Value = Row.href;
}

但是当我尝试执行时,出现以下错误:

[Script Component [116]] Error: Microsoft.SqlServer.Dts.Pipeline.ReadWriteVariablesNotAvailableException: The collection of variables locked for read and write access is not available outside of PostExecute.
at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)
at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer buffer)
at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 wrapper, Int32 inputID, IDTSBuffer100 pDTSBuffer, IntPtr bufferWirePacket)

解决方法:

在脚本组件中,与ProcessInputRow方法相反,只能在PostExecute方法中写入变量.要使用列中的值更新变量,请在这些方法之外声明一个变量,在ProcessInputRow中更新该变量,然后在PostExecute方法中将此值分配给SSIS变量.当然,还要在脚本组件的ReadWriteVariables字段中添加SSIS变量.您可能知道,ProcessInputRow方法每行调用一次,而PostExecute仅在处理完所有记录之后才执行,因此,如果您需要对多行中的值进行操作,则需要在ProcessInputRow方法.请注意,对于通过此组件生成的每条记录执行任何操作都会带来额外的开销.

string nextPageLink = null;

public override void PostExecute()
{
    base.PostExecute();
    Variables.NextPageLink = nextPageLink;  
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    nextPageLink = Row.href;
}

标签:ssis,ssis-2012,vb-net,c,sql-server
来源: https://codeday.me/bug/20191108/2006911.html