SSIS 2012 Excel源动态ConnectionString配置报错求助
解决SSIS 2012动态Excel连接的DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER错误
针对你遇到的这个问题,我整理了几个常见排查方向和解决方案,咱们一步步来梳理:
1. 检查OLEDB驱动版本与运行模式的匹配性
你当前连接字符串用的是Microsoft.Jet.OLEDB.4.0,这是仅支持32位的旧驱动,而SSIS 2012默认会以64位模式运行。如果你的服务器是64位系统,就会出现找不到驱动的情况,直接导致连接失败。
解决方法:
- 打开SSIS项目属性,在调试选项卡中,把
Run64BitRuntime设置为False; - 若用SQL Server代理作业执行包,需指定使用32位的DTExec.exe(路径一般是
C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\DTExec.exe)。
2. 修正连接字符串与Excel文件版本的匹配
你处理的是.xlsx文件,但连接字符串里用的是EXCEL 8.0(对应旧版.xls格式),这会导致驱动无法正确识别文件格式。应该改用支持.xlsx的ACE驱动和对应参数:
正确的连接字符串表达式如下:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+@[User::SourceFileExcel]+";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\";"
注意:如果服务器未安装ACE驱动,需先安装Microsoft Access Database Engine 2010 Redistributable(对应SSIS 2012版本),确保驱动版本和运行模式(32/64位)一致。
3. 验证变量SourceFileExcel的正确性
先排除脚本任务获取路径的问题:
- 在脚本任务里添加一段代码,弹出变量值(比如
MessageBox.Show(Dts.Variables["User::SourceFileExcel"].Value.ToString());),确认路径完整且正确,没有空格遗漏、特殊字符或文件不存在的情况; - 或者直接手动给
SourceFileExcel变量赋值一个已知存在的.xlsx文件路径,运行包看是否还会报错。
4. 优化Excel连接管理器的表达式配置
如果你选择设置ExcelFilePath的表达式,要注意:
- 不要同时给
ConnectionString和ExcelFilePath都设置表达式,这会导致冲突,保留其中一个即可(推荐设置ExcelFilePath,让SSIS自动生成正确的ConnectionString); - 确保Excel源组件本身的
DelayValidation属性也设置为True,只设置连接管理器和数据流任务可能不够。
5. 排查文件权限的隐性问题
虽然你说权限和CSV包一致,但Excel文件有特殊要求:
- 确认目标.xlsx文件没有被其他进程锁定(比如有人用Excel打开着);
- 执行SSIS包的账户(比如SQL Server代理账户)需要对文件所在文件夹有读取+写入权限——ACE驱动在读取Excel时会生成临时文件,需要写入权限。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

