来自Variable的动态ConnectionString的SSIS 2012 Excel源代码

时间:2018-01-17 11:21:22

标签: sql-server excel ssis etl ssis-2012

我有一个简单的SSIS 2012包:

  • 脚本任务从文件夹中获取最新的.xlsx文件名,并将完整路径存储在包范围变量中:SourceFileExcel
  • 一个名为FUNB的Excel连接管理器,用于连接文件
  • 使用FUNB连接管理器
  • 的Excel源代码

当尝试动态分配ConnectionString时,我收到错误:

  

[Excel Source [2]]错误:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“FUNB”的AcquireConnection方法调用失败,错误代码为0xC0209303。在此之前可能会发布错误消息,其中包含有关AcquireConnection方法调用失败原因的更多信息。

我尝试了以下内容:

  1. 通过浏览实际文件添加Connection Manager。将Excel源连接到它。预览数据。
  2. 手动加载文件后,请更新连接管理器属性。设置ConnectionString表达式:

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+@[User::SourceFileExcel]+";Extended Properties=\"EXCEL 8.0;HDR=Yes; IMEX=1\";"
    
  3. 上面会产生错误。将表达式更改为ExcelFilePath设置为:

    @[User::SourceFileExcel]
    
  4. ExcelFilePathConnectionString表达式都会产生相同的错误。我在Excel连接管理器和数据流对象上都尝试了DelayValidation=True

    我在同一台服务器上有另一个程序包,它的工作方式大致相同,但使用的是CSV连接。该包正常运行。两个源文件夹上的Windows安全权限都是相同的。

    关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

我认为在连接到excel 2007或更高版本时应该使用Microsoft.ACE.OLEDB.12.0作为提供程序,还要确保没有以64位模式运行程序包

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::SourceFileExcel] + ";Extended Properties=\"Excel 12.0;HDR=YES\";"

或者尝试以下格式(不写Extended Properties

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::SourceFileExcel] + ";Excel 12.0;HDR=YES;IMEX=1"

如果这些建议都不起作用,那么我认为这不是表达问题,而您正面临 the same issue in this link

问题可能是在计算机上找到了64位办公室安装,需要安装32-bit AccessDatabaseEngine