我试图遍历目录中的excel文件并在SSIS中执行数据流任务。
“每次循环”容器的设置似乎非常简单:
我映射到一个名为FileNameTemp的变量。
在每次循环中,我都有一个数据流任务,其中源对象是带有Excel Connection Manager的Excel Source。我使用FileName临时设置ExcelFileName的文件名:
我的问题是,每当我尝试运行程序包时,都会出现以下错误:
[连接管理器“ Excel连接管理器”]错误:SSIS错误代码 DTS_E_OLEDBERROR。发生OLE DB错误。错误代码: 0x80004005。 OLE DB记录可用。资料来源:“ Microsoft Access 数据库引擎”结果:0x80004005描述:“失败创建 文件。”
我找到了其他类似的帖子。我绝对有权写入此文件夹。如果我删除该表达式,而只是一遍又一遍地打开相同的文件就可以。我还几乎在每个级别上都将DelayValidation设置为true。
答案 0 :(得分:2)
尝试从表达式定义中删除“ C:...”。 For-Each文件枚举器将提供完整路径。
将来,您可以在数据流任务上设置一个断点,并查看在“本地”选项卡中设置的变量的值。
答案 1 :(得分:1)
相同的答案,比@mike Baron的答案更冗长的是,在ForEach循环容器中,单选按钮被选中为“完全合格”,结果被推入变量@[User::FileNameTemp]
在指定的源文件夹C:\ SourceCode \ ExcelSourceFinancialReconcilliation中找到的每个文件将依次以
的形式分配给该变量。然后,当我们在Excel连接管理器的ExcelFilePath
属性上设置表达式时,我们只需要使用@[User::FileNameTemp]
就可以了,表达式使路径加倍,以便Excel尝试查找
C:\SourceCode\ExcelSourceFinancialReconcilliation\file1.txt\C:\SourceCode\ExcelSourceFinancialReconcilliation\file1.txt
通常,仅在SSIS中与“对象”相关的表达式中使用直接变量。 Property1 = @Variable这样做的原因是,您不能在评估上加上断点来确定@ Property1 =“ Foo” + @Variable为何无效。如果创建自定义变量@ Property1Variable =“ Foo” + @Variable,然后分配@ Property1 = @ Property1Variable,则可以在包中放置一个断点,然后检查SSIS变量的值。这样发现问题要容易得多。
关于该主题的其他答案可能很有帮助
https://stackoverflow.com/a/18640174/181965 https://stackoverflow.com/a/21536893/181965