SSIS对象变量使用的数据类型

时间:2014-08-26 14:56:49

标签: c# ssis

我已经在脚本任务中填充了一个 List ,其中包含一个具有3个属性的自定义类。

我想在SSIS的Foreach循环容器中为变量提供属性。

SSIS对象变量可接受哪些c#数据类型?我没有把这个列表转换成数组的好运(如果我只使用1个属性,但只要我使用2个属性就会失败)。

编辑: 如果我填充这样的数组:

string[] newArrayB = new string[] { "A1", "A2", "A3" };

然后,我可以将数组传递给SSIS对象变量,并使用Foreach From Variable Enumerator遍历它。将1列映射到SSIS字符串变量。

如果我填充这样的数组:

string[,] newArrayA = new string[3, 2] { { "A1", "Account A1" }, { "A2", "Account A2" }, { "A3", "Account A3" } };

然后我可以将数组传递给SSIS对象变量但是如果我将两列映射到索引0和索引1上的不同SSIS字符串变量,则无法循环。它只是循环遍历每一列虽然它是一个。

如果我使用ADO枚举器,我得到"变量不包含有效的数据对象"。

我的列表最初来自GetDirectories:

var folders = Directory.GetDirectories(FolderRoot).Where(d => Regex.IsMatch(Path.GetDirectoryName(d), "^[0-9]*")).ToList();

然后我将其删除到帐号部分和文件夹名称的其余部分。我假设我需要将列表更改为数组以使其可用于Foreach。

1 个答案:

答案 0 :(得分:0)

我为同一个问题经历了两种不同的解决方案。没有或它们是完美的,并且对于在SSIS中应该很容易实现的东西来说太冗长了:

  • 在C#代码中创建 ADO数据集而不是数组Array,然后使用ADO枚举器循环它。创建数据容器的代码更详细,但可以完成。一个限制是没有一个字段可以是一个复杂的对象,但这不应该是一个问题,因为你的所有数据似乎都是字符串类型。

  • 使用 Foreach from Variable 枚举创建列表并在其上循环。将枚举的当前值(索引0)存储在临时 Object 变量中。该变量保存当前内部列表(例如{" A","帐户A"})。 在foreach中,您必须放置脚本任务,将 Object 变量强制转换为列表,提取值并将它们存储在单独的变量中。类似的东西:

    List<String> accountMetadata = (List<String>)Dts.Variables["User::AccountMetadata"].Value;
    Dts.Variables["User::CurrentFolder"].Value = accountMetadata[0];
    Dts.Variables["User::CurrentAccount"].Value = accountMetadata[1];