当通过 c# 脚本任务在 foreach 循环容器内 运行 时,SSIS Excel 连接字符串未使用枚举文件更新

SSIS Excel connection string not updating with enumerated file when run inside a foreach loop container via a c# script task

问题:

我的 excel 连接管理器文件路径没有被通过 Foreach 文件枚举器传入的更新变量更新。

功能要求:

我在一个目录中有一组 excel 文件,我需要遍历这些文件并将其导入到 SQL 服务器数据库中。

这些文件的第一个限制是其中一列的每个单元格中最多有 3000 个字符(超出了标准的最多 255 个字符)。

第二个限制是我在这里有一个限制,我不能采用正常路径并更新注册表以对更多行进行采样(因此我通常会创建一个包含前几行的入门文件该列有 3000 个字符)。

解决方案大纲:

原型: 为了应对 >255 个字符的单元格并禁止编辑注册表,我选择使用利用 Excel 连接的脚本任务。 参考:
https://egilhansen.com/2015/07/28/ssis-solution-excel-data-source-text-truncation-column-more-than-255-characters/

我有一个 DataFlow 任务使用这个脚本导入一个文件,所以脚本是正确的。

仅供参考,数据流任务中只有 3 个数据流项: 1) 提取 excel 文件内容的脚本任务 2)在枚举的filstring中添加的派生列 3) 将这些加载到数据库中的 ole db

文件夹中的所有文件解决方案:

然后我设置了一个 Foreach 循环容器并将脚本任务复制到其中。

我将 Excel 连接的表达式的属性配置为具有 属性 的文件路径,并将文件名变量映射到 foreach 文件枚举器映射到的文件名变量。

最后,我在流任务控制、excel 连接和 Excel 连接管理器的属性上设置了延迟验证。

旁注:在 Foreach 文件枚举器中,派生列实际上正确地添加了枚举的文件名 --> 它只是 excel 连接字符串也没有更新。

结束评论: 我搞砸了将 excel 文件表达式更改为 ConnetionString 并添加了另一个变量和脚本任务以在 foreach 循环内更改它(利用枚举的文件变量),但 ConnetionString 变量没有更新.. ....我现在想知道是否需要在现有的 foreach 循环中嵌套一个 foreach 循环容器来更新 excel 连接字符串变量,然后再继续执行主脚本

我还没有发表评论的声誉,我深表歉意。我在您的上一条评论中看到您说连接字符串没有更新。这是我在使用 SSIS 之前遇到的一个问题,它不会在组件内部分配变量的值。这意味着如果你在循环内部,它在完成循环之前不会分配值。这也适用于数据流。解决它的方法是像您在嵌套循环中建议的那样先设置该值。如果您不介意,我们可以将其用作评论,主要是为了帮助您解决问题。