我的过程中的Foreach循环容器没有将新文件名推送到已建立的变量中。它遍历该过程的次数是有多少个符合条件的文件,我只需要文件名是动态的即可。
我创建了一个变量名称,该变量名称包含所需目录中第一个文件的完整文件路径。看起来像C:\Somepath\ExcelFile.xlsx
我还创建了一个变量名ExtProperties,将其用于ConnectionString中,其值是"Excel 12.0;HDR=Yes"
Foreach循环容器具有以下设置:
我之前提到的ExcelFileName变量已设置为索引0
我创建了一个具有以下相关属性的指向初始文件的Excel连接管理器:
表达式:我既尝试将设置ExcelFilePath为ExcelFileName变量,又对ConnectionString使用以下命令:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::ExcelFileName] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""
Run Code Online (Sandbox Code Playgroud)现在,它仅使用ConnectionString。
数据流正在使用通过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