如何以编程方式将ADO变量设置为SSIS中的ForEach循环枚举器?

时间:2013-03-25 14:49:02

标签: .net ssis ado

我正在使用SSIS对象模型以编程方式创建SSIS包。

我希望使用我作为枚举器创建的ADO对象变量来创建一个ForEach循环。如何将变量分配给枚举器并在循环中使用其值?

1 个答案:

答案 0 :(得分:4)

假设:

  • 您有一个ADO对象变量 User :: ADOObject ,其中包含两列

代码:

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”参数引用该包):

EzForEachLoop ezf = new EzForEachLoop(this); 
ezf.Initialize(ForEachEnumeratorType.ForEachADOEnumerator);

现在 ezf 的枚举器和变量映射的设置方式与上面的 ForEachLoop f 相同。