Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在SSIS 2017中的excel连接管理器上使用表达式_Ssis - Fatal编程技术网

无法在SSIS 2017中的excel连接管理器上使用表达式

无法在SSIS 2017中的excel连接管理器上使用表达式,ssis,Ssis,我正在尝试循环浏览目录中的excel文件,并在SSIS中执行数据流任务 For-Each循环容器的设置似乎非常简单: 我映射到一个名为FileNameTemp的变量 在For Each循环中,我有一个数据流任务,其中源对象是带有Excel连接管理器的Excel源。我使用文件名临时设置ExcelFileName的文件名: 我的问题是,每当我尝试运行包时,都会出现以下错误: [连接管理器“Excel连接管理器”]错误:SSIS错误代码 DTS_E_OLEDBERROR。发生OLE DB错误。错

我正在尝试循环浏览目录中的excel文件,并在SSIS中执行数据流任务

For-Each循环容器的设置似乎非常简单:

我映射到一个名为FileNameTemp的变量

在For Each循环中,我有一个数据流任务,其中源对象是带有Excel连接管理器的Excel源。我使用文件名临时设置ExcelFileName的文件名:

我的问题是,每当我尝试运行包时,都会出现以下错误:

[连接管理器“Excel连接管理器”]错误:SSIS错误代码 DTS_E_OLEDBERROR。发生OLE DB错误。错误代码: 0x80004005。OLE DB记录可用。资料来源:“Microsoft Access 数据库引擎“Hresult:0x80004005说明:”创建失败 档案。”

我找到了其他类似的帖子。我绝对有权限写这个文件夹。如果我删除这个表达式,然后一遍又一遍地打开同一个文件,它就会工作。我还将DelayValidation在几乎所有级别上设置为true。

尝试从表达式定义中删除“C:…”。For Each文件枚举器将给出完整路径


将来,您可以在数据流任务上设置断点,并查看在“局部变量”选项卡中设置的变量值。

相同的答案,比@mike Baron的答案更详细的是,在ForEach循环容器中,单选按钮被选中为“完全限定”,结果被推入变量
@[用户::FileNameTemp]

在指定的源文件夹C:\SourceCode\ExcelSourceFinancialReconciliation中找到的每个文件都将以

  • C:\SourceCode\ExcelSourceFinancialReconciliation\file1.txt
  • C:\SourceCode\ExcelSourceFinancialReconciliation\file2.csv
  • C:\SourceCode\ExcelSourceFinancialReconciliation\file2.xls
然后,当我们在Excel连接管理器
ExcelFilePath
属性上设置表达式时,只需按原样使用
@[User::FileNameTemp]
,表达式将路径加倍,以便Excel尝试查找

C:\SourceCode\ExcelSourceFinancialReconcilliation\file1.txt\C:\SourceCode\ExcelSourceFinancialReconcilliation\file1.txt
作为一般规则,仅在与SSIS中的“对象”关联的表达式中使用直接变量。Property1=@variable原因是,您无法在求值中设置断点来确定@Property1=“Foo”+@variable无效的原因。如果您创建自定义变量@Property1=“Foo”+@Variable,然后分配@Property1=@Property1Variable,您可以在包中放置断点,然后检查SSIS变量的值。这样更容易发现问题

可能对这个问题有帮助的其他答案


天哪,我真不敢相信我错过了。