【问题标题】:How do I programmatically set an ADO variable to a ForEach loop enumerator in SSIS?如何以编程方式将 ADO 变量设置为 SSIS 中的 ForEach 循环枚举器?
【发布时间】:2013-03-15 02:46:41
【问题描述】:

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

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

【问题讨论】:

    标签: .net ssis ado


    【解决方案1】:

    假设:

    • 您有一个 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的枚举数和变量映射可以按照上面的ForEachLoopf一样的方式设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多