如何将多个DataFlow任务添加到Foreach容器中

时间:2014-03-20 12:31:44

标签: ssis sql-server-2008-r2 ezapi

如何使用foreach将多个数据流任务添加到单个EzAPI容器中。基本上我需要做的如下。

enter image description here

我是EzAPI的新手。任何人都可以给我这种情况的代码示例。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的问题实际上可以归结为两个问题:如何创建各种容器和任务?如何定义它们之间的优先约束?

正如您在下面的代码中看到的,我创建了EzPackageEzForEachLoopEzExecSqlTaskEzDataFlowTask的实例。 EzAPI任务和容器都在其构造函数中接受父对象。这是您指定对象应存在的范围的方式。因此,For Each循环将基本包作为其参数,但数据流和执行SQL任务使用For Each循环,以便在该容器内创建它们。

定义对象之间的优先约束有不同的机制,它取决于您使用的版本:object.AttachTo vs package.PrecedenceConstraints.Add

    public static void GimmieDaCodez()
    {
        EzPackage ezPackage = null;
        EzForEachLoop ezLoop = null;
        string packageName = @"so_22533130";
        string outputFile = string.Format("{0}.dtsx",System.IO.Path.Combine(@"C:\Dropbox\Sandbox\UtumnoSandbox\EzAPIDemo\EzAPIDemo", packageName));

        EzDataFlow df1 = null;
        EzDataFlow df2 = null;
        EzDataFlow df3 = null;
        EzExecSqlTask t4 = null;


        // Instantiate and configure our package
        ezPackage = new EzPackage();
        ezPackage.Name = packageName;
        ezPackage.Description = "A package with a foreach enumerator and muliple data flows";

        // Lazy initialization of FELC
        ezLoop = new EzForEachLoop(ezPackage);
        ezLoop.Name = "FELC Enumerate stuff";
        ezLoop.Description = "EzAPI still does not allow configuration of FELC beyond file enumerator";

        // Instantiate our tasks. Details left to the implementer
        df1 = new EzDataFlow(ezLoop);
        df1.Name = "DFT 1";
        df2 = new EzDataFlow(ezLoop);
        df2.Name = "DFT 2";
        df3 = new EzDataFlow(ezLoop);
        df3.Name = "DFT 3";
        t4 = new EzExecSqlTask(ezLoop);
        t4.Name = "SQL Do all the things";

        df2.AttachTo(df1);
        df3.AttachTo(df1);
        t4.AttachTo(df2);
        t4.AttachTo(df3);

        ezPackage.SaveToFile(outputFile);
    }

使用该代码,我生成一个类似于

的包

enter image description here

参考