【发布时间】:2013-03-15 02:46:41
【问题描述】:
我正在使用 SSIS 对象模型以编程方式创建一个 SSIS 包。
我想要一个 ForEach 循环,它使用我创建的 ADO 对象变量作为枚举器。如何将变量分配给枚举器并在循环中使用其值?
【问题讨论】:
我正在使用 SSIS 对象模型以编程方式创建一个 SSIS 包。
我想要一个 ForEach 循环,它使用我创建的 ADO 对象变量作为枚举器。如何将变量分配给枚举器并在循环中使用其值?
【问题讨论】:
假设:
代码:
using Microsoft.SqlServer.Dts.Runtime.Enumerators;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Runtime.Enumerators.ADO;
ForEachLoop f = new ForEachLoop();
ForEachADOEnumerator ado_enum = (ForEachADOEnumerator) f.ForEachEnumerator.InnerObject;
ado_enum.Type = ADOEnumerationType.EnumerateRowsInFirstTable;
ado_enum.DataObjectVariable = "User::ADOObject";
f.VariableMappings.Add();
f.VariableMappings[0].VariableName = "User::Key";
f.VariableMappings[0].ValueIndex = "Key";
f.VariableMappings.Add();
f.VariableMappings[1].VariableName = "User::Value";
f.VariableMappings[1].ValueIndex = "Value";
如果您使用EzAPI,首先您必须修改EzAPI 源,因为EzForEachLoop 类不会公开VariableMappings。将此属性添加到 EzExecutables.cs 中的 EzForEachLoop 类中:
public ForEachVariableMappings VariableMappings
{
get { return (m_exec as ForEachLoop).VariableMappings; }
}
然后在您的代码中像这样初始化 EzForEachLoop(假设 this 在自定义包类中调用,构造函数中的“this”参数引用该包):
EzForEachLoop ezf = new EzForEachLoop(this);
ezf.Initialize(ForEachEnumeratorType.ForEachADOEnumerator);
现在ezf的枚举数和变量映射可以按照上面的ForEachLoopf一样的方式设置。
【讨论】: