以编程方式执行SSIS包

时间:2013-11-13 16:41:48

标签: c# visual-studio-2012 ssis package

以下是我将要提到的代码。几个问题:

  1. 我能在一个“String pkgLocation =”语句中引用两个不同的.DTSX文件吗? (我在下面做了),如果我不能这样做,并且有超过10个不同的程序包以编程方式执行,是否有一种快速而无痛的方法可以解决这个问题?

  2. 以下代码是否完全代表实体框架?

  3. 自从我玩SSIS以来已经有一段时间了,我想知道如何具体执行它?只需按“运行”就不会在测试资源管理器中显示任何内容(可能是因为它不是测试),当我尝试执行它时,我收到一条消息,指出“无法直接启动带有类库输出类型的项目”这甚至是什么意思?

  4. 我走在正确的轨道上吗? (关于以编程方式执行这些包)


  5. public class UnitTest1
        {
    
            private void Execute_Package()
            {
                string pkgLocation = @"C:\tfs\z Reports\BI Projects\Customer Service Data Warehouse\Customer Service Data Warehouse" +
                                     @"C:\tfs\z Reports\BI Projects\Customer Service Data Warehouse\SRS DataMart SSIS\SRSDimCategorizationLoad.dtsx";
                Package pkg;
                Application app;
                DTSExecResult pkgResults;
                Variables vars;
    
                app = new Application();
                pkg = app.LoadPackage(pkgLocation, null);
    
                vars = pkg.Variables;
                vars["A_Variable"].Value = "Some value";
    
                pkgResults = pkg.Execute();
    
    
            }
        }
    

    以下是我在上面代码中添加的旧代码

    private static void LoadTicketLifeCycleSnapShotFact()
            {
                ExceutePackage(@"C:\tfs\z Reports\BI Projects\Customer Service Data Warehouse\Customer Service Data Warehouse\SAPBPDataToStage.dtsx");
    
                ExceutePackage(@"C:\tfs\z Reports\BI Projects\Customer Service Data Warehouse\SRS DataMart  SSIS\SRSDimCategorizationLoad.dtsx");
    

1 个答案:

答案 0 :(得分:2)

我将创建一个包位置数组,然后通过它们枚举为每个包调用Execute方法。

    private void Execute_Package()
    {
        string [] pkgLocations = new string[]{
            @"C:\tfs\z Reports\BI Projects\Customer Service Data Warehouse\Customer Service Data Warehouse",
            @"C:\tfs\z Reports\BI Projects\Customer Service Data Warehouse\SRS DataMart SSIS\SRSDimCategorizationLoad.dtsx"};
        Package pkg;
        Application app;
        DTSExecResult pkgResults;
        Variables vars;

        app = new Application();
        foreach(string currentFile in pkgLocations)
        {
            pkg = app.LoadPackage(currentFile, null);

            // Assumes this variable exists in all of the packages
            vars = pkg.Variables;
            vars["A_Variable"].Value = "Some value";

            pkgResults = pkg.Execute();
        }
    }

回答您提出的具体问题:

  1. 不,您无法按照指定引用它们。以上是按顺序执行包的方法。
  2. 我不知道这是否是“EF”。我认为不是
  3. 您已经创建了一个测试library。图书馆不是一个可运行的东西。还需要其他东西(使用Main方法)。对于测试,这将是您的测试工具(nUnit)。或者,我创建一个使用测试项目的控制台应用程序,以确保您正确构建测试用例(然后创建一个测试项目来测试您的测试...)
  4. 是的,上面的代码实例化一个包,为SSIS变量赋值,然后使用该新变量运行包。