存储可执行文件/任务主机的引用以添加优先约束

时间:2014-02-11 00:02:44

标签: c# ssis

我在for循环中以编程方式创建executionql任务并将其添加到我的包中。现在Add调用返回给我一个Executable集合对象。我想根据我添加的任务的一些唯一性将这些引用存储在带有一些字符串键名的字典中。

我想这样做,以便在for循环之外,我可以在所有任务形成之后在各种可执行任务之间添加优先约束。有没有办法做到这一点?

我尝试创建一个字符串到Executable的字典,但是当从Add方法添加返回的可执行文件时,我可以得到一个异常,即Executable为NULL。 MSDN在此提供了一个示例,说明如何添加像

这样的优先约束
    using System;
using Microsoft.SqlServer.Dts.Runtime;

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      Package p = new Package();

      // Add a File System task.
      Executable eFileTask1 = p.Executables.Add("STOCK:FileSystemTask");
      TaskHost thFileHost1 = eFileTask1 as TaskHost;

      // Add a second File System task.
      Executable eFileTask2 = p.Executables.Add("STOCK:FileSystemTask");
      TaskHost thFileHost2 = eFileTask2 as TaskHost;

      // Put a precedence constraint between the tasks.
      // Set the constraint to specify that the second File System task cannot run
      // until the first File System task finishes.
      PrecedenceConstraint pcFileTasks = 
        p.PrecedenceConstraints.Add((Executable)thFileHost1, (Executable)thFileHost2);
      pcFileTasks.Value = DTSExecResult.Completion;
    }
  }
}

在我的场景中,它只是动态控制添加的任务数量,我想为每个创建的任务存储句柄,以便稍后我可以将这些句柄传递给添加优先约束func调用。

2 个答案:

答案 0 :(得分:0)

你正在连接错误的东西。添加将期望Executable,而不是TaskHost

PrecedenceConstraint pcFileTasks = p.PrecedenceConstraints.Add(eFileTask1, eFileTask2);

使用此代码,我生成了以下包,在两个任务之间具有Completion优先约束。

enter image description here

答案 1 :(得分:0)

我能够让它发挥作用。它按常规方式工作。