【问题标题】:Datatype used by SSIS object variableSSIS 对象变量使用的数据类型
【发布时间】:2014-08-27 20:41:16
【问题描述】:

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

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

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

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

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 枚举器,我会得到“变量不包含有效数据对象”。

我的List最初来自GetDirectories:

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

然后我将其拆分为帐号部分和文件夹名称的其余部分。我假设我需要将 List 更改为 Array 以使其可用于 Foreach。

【问题讨论】:

  • 你可以看看Loop。我会用 ADO 来做同样的事情。
  • @t_m 如果我创建一个虚拟数组: string[,] newArray = new string[3, 2] { { "A", "Account A" }, { "B", "Account B " }, { "C", "账户 C" } };并将其分配给我无法使用 ado 枚举器访问第二列的对象变量
  • 数组基本上是一个表,"A", "Account A" 是记录 1,"B", "Account B" 是记录 2,依此类推。在 foreach 循环中,您可以将尽可能多的字段访问到变量中。这是一个例子Foreach Loop。一个问题.. 从哪里获取数据以填充您的数组(文件/数据库)?

标签: c# ssis


【解决方案1】:

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

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

  • 创建一个列表列表并使用 Foreach from Variable 枚举对其进行循环。将枚举的当前值(索引 0)存储在临时 Object 变量中。该变量保存当前的内部列表(例如 { "A", "Account 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];
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多