c# - 如何将列值存储到数据流任务中的变量中?
问题描述
我有 DFT,我从表中提取一个 URL,我需要将该值存储到一个变量中。
我正在使用 OLEDB Source 连接到 My SQL Server 并选择所需的列。然后我有条件拆分,它将为我拆分正确的 URL。来自我已映射到脚本组件的条件拆分的正确 URL 流。
以下是我使用的 C# 代码:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
this.ReadWriteVariables["User::NextPageLink"].Value = Row.href;
}
但是当我尝试执行时,出现以下错误:
[脚本组件 [116]] 错误:Microsoft.SqlServer.Dts.Pipeline.ReadWriteVariablesNotAvailableException:为读写访问锁定的变量集合在 PostExecute 之外不可用。在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer 缓冲区) 在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 包装, Int32 inputID, IDTSBuffer100 pDTSBuffer, IntPtr bufferWirePacket)
解决方案
在脚本组件中,变量只能写入PostExecute
方法中,而不是ProcessInputRow
方法中。要使用列中的值更新变量,请在这些方法之外声明一个变量,更新 中的变量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;
}
推荐阅读
- c# - 使用泛型类型调用的构造函数总是选择父类型,而存在更具体的构造函数
- python - Python打印变量没有足够的格式字符串参数
- java - 如何从其他活动中获取视图?
- jquery - 在 bootstrap4 中平滑滑动列
- google-bigquery - 我需要更新 BigQuery 表中数组中的值
- android - Retrofit 正在去除 url 中的斜杠
- jhipster - jhipster 生成的应用程序中的 SP 元数据 xml 在哪里?
- java - Apache Kafka (KStreams):如何订阅多个主题?
- firebase - Flutter 谷歌服务插件
- .net-core - 如何在 .net 2.1 鳕鱼库中使用 log4net