通过c#脚本任务

时间:2017-10-13 12:19:47

标签: c# excel ssis foreach-loop-container

问题:

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

功能要求:

我在目录中有一组excel文件需要迭代并导入到SQL Server数据库中。

这些文件的第一个限制是其中一个列的每个单元格中最多包含3000个字符(吹出标准的255个字符最大值)。

第二个限制是我在这里有一个限制,我不能采取正常路径并更新注册表以采样更多行(我通常会创建一个带有该列前几行的引物文件拥有3000个字符。)

解决方案大纲:

原型: 为了对抗> 255个char单元并禁止编辑注册表,我选择使用利用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连接的Expression的属性配置为具有filepath属性,并将foreach文件枚举器映射到的文件名变量映射到它。

最后,我在flow task,excel连接和Excel连接管理器的属性控件上设置了Delayvalidation。

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

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

1 个答案:

答案 0 :(得分:0)

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