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

本文关键字:数据类型 对象 变量 SSIS | 更新日期: 2023-09-27 18:19:32

我在脚本任务中用一个具有3个属性的自定义类填充了一个List

我想使这些属性可用于SSIS中Foreach循环容器中的变量。

SSIS对象变量可以接受哪些c#数据类型?我没有太多的运气将列表转换为数组(如果我只使用1个属性,它很好,但一旦使用2个属性,就会失败)。

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

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

然后,我可以将数组传递给SSIS对象变量,并使用Foreach From variable枚举器对其进行循环。将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。

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

对于同一个问题,我经历了两种不同的解决方案。它们中没有一个是完美的,而且对于本应在SSIS:中轻松实现的东西来说过于冗长

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

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

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