小编J. *_*ton的帖子

SSIS Foreach循环容器不循环通过Excel文件

我的过程中的Foreach循环容器没有将新文件名推送到已建立的变量中。它遍历该过程的次数是有多少个符合条件的文件,我只需要文件名是动态的即可。

我创建了一个变量名称,该变量名称包含所需目录中第一个文件的完整文件路径。看起来像C:\Somepath\ExcelFile.xlsx 我还创建了一个变量名ExtProperties,将其用于ConnectionString中,其值是"Excel 12.0;HDR=Yes"

ExcelFileName

Foreach循环容器具有以下设置:

采集

  1. 枚举器设置为Foreach文件枚举器
  2. 文件夹是我文件的目录位置
  3. 文件当前设置为* .xlsx
  4. 检索文件名设置为“完全合格”

变量映射

我之前提到的ExcelFileName变量已设置为索引0

我创建了一个具有以下相关属性的指向初始文件的Excel连接管理器:

Excel连接管理器

  1. DelayValidation:正确
  2. 表达式:我既尝试将设置ExcelFilePath为ExcelFileName变量,又对ConnectionString使用以下命令:

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +  @[User::ExcelFileName]   + ";Extended Properties=\"" +  @[User::ExtProperties] + "\""
    
    Run Code Online (Sandbox Code Playgroud)

现在,它仅使用ConnectionString。

  1. 保留相同的连接:错误

数据流正在使用通过Excel连接管理器的Excel源。数据流的目的是从每个excel文件中提取记录数,获取文件名和执行加载的用户,然后将信息推送到数据库中。但是,当推送到数据库时,文件名和记录数始终是第一个使用的文件,与许多文件满足条件的次数相同。

数据流

我没有收到任何错误消息或警告。我在控制流中使用了以下脚本来查看变量的值是否已更改,但是弹出的消息框显示我仍然可以获取初始值。

控制流

MessageBox.Show(Dts.Variables["User::ExcelFile"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关此问题的主题,这些都是建议工作的设置,但这对我来说仍然是一个问题。任何帮助,将不胜感激。

sql-server excel ssis foreach-loop-container visual-studio-2017

5
推荐指数
1
解决办法
502
查看次数