我已经在脚本任务中填充了一个 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。
答案 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];