通过C#克隆SSIS数据流

时间:2017-08-07 19:01:30

标签: c# ssis

我创建了一个名为'User'的SSIS数据流(Designer模式)的包,从表'User'到ADO.NET Destination表'UserDest'的ADO.NET源(列:id,名称)。表列是相同的。然后我必须重新创建与其他100个剩余表格相同的Dataflow结构(通过创建优先级约束,因为导入必须每次执行一个表)。 我的想法是通过C#编辑包,克隆“用户”数据流的结构,调整列映射和ADO.NET表源和目标。

我已经开始创建一个Package变量来开始克隆属性,但InnerObject返回null:

using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
namespace ConsoleApplication1
{
    public class Gerador
    {
        public string RunPackage2()
        {
            var pkgLocation = @"C:\Users\me\Documents\Visual Studio 2015\Projects\SSISExample1\SSISExample1\Package.dtsx";

            Application app = new Application();
            Package pkg = app.LoadPackage(pkgLocation, null);
            var importUsersHost = pkg.Executables[0] as TaskHost;

            var pipe = importUsersHost.InnerObject as MainPipe; // Here it returns null

            Console.WriteLine();
            return "OK";
        }
    }
}

在简历中,我需要生成100个其他数据流,如“用户”数据流,并逐个添加连接器(因为每个数据流必须逐个运行)。

Dataflow image

Package image

2 个答案:

答案 0 :(得分:0)

您最好的方法是使用BIML来完成此任务。您可以从这个系列开始 - link

答案 1 :(得分:0)

马塞洛,

我会检查可执行文件中的第一个元素是否实际上是数据流任务。如果您尝试使用名称访问元素会发生什么?像可执行文件[“my_data_flow_name”]?

或者,我会请你尝试我写的工具。它比直接使用对象模型更简单。查看this示例并复制它。

如果您不想使用我编写的工具,您可以查看其中的基础源代码并直接将其应用于SSIS对象模型。但是你可能会发现使用我写的工具更容易: - )

更新:我编辑了我的答案,直接在示例中显示循环,以及如何添加优先约束。