4

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

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

4

1 回答 1

4

假设:

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

代码:

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的枚举数和变量映射可以按照与上面的ForEachLoop f相同的方式设置。

于 2013-03-25T14:49:02.060 回答