SSIS包执行报错:Microsoft.ACE.OLEDB.16.0未注册及后续问题
问题描述
每次运行已保存的SSIS包时,触发错误:请求的OLE DB提供程序Microsoft.ACE.OLEDB.16.0未注册。后续安装Microsoft.ACE.OLEDB.16.0驱动后,出现新错误:
SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "(null)" Hresult: 0x80004005 Description: "(null)"
环境信息
- Microsoft® Excel® for Microsoft 365 MSO (Version 2408 Build 16.0.17928.20538) 32位
- Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046862) - 16.0.4155.4 (X64)
- 当前安装:Microsoft AccessDatabaseEngineX64 16.0.4519.1000 Gen P0
- SSIS包存储于SSISDB,连接字符串:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[UNC Path of the file address];Extended Properties="EXCEL 8.0;HDR=YES"
已尝试操作
- 交替安装32位/64位ACE驱动,问题未解决
- 勾选SSIS包“32位运行时”选项执行,仍失败
- 将连接管理器
RetainSameConnection属性改为True,无效 - 导入导出向导可正常检测Excel文档、工作表,“立即运行”能成功加载数据,但保存为SSIS包后运行失败
解决方案
1. 匹配驱动位数与运行环境
- 因SQL Server 2022为64位,仅保留64位ACE驱动,卸载所有32位ACE组件(含32位Office自带的冲突驱动)。若已安装32位Office,需用被动命令安装64位ACE驱动避免兼容性拦截:
AccessDatabaseEngine_X64.exe /passive - 执行
EXEC sp_enum_oledb_providers,确认输出中存在Microsoft.ACE.OLEDB.16.0且IsLocal列值为1。
2. 修正连接字符串与驱动版本对应
将连接字符串的Provider改为已安装的驱动版本,同时匹配Excel文件格式:
Provider=Microsoft.ACE.OLEDB.16.0;Data Source=[UNC Path];Extended Properties="Excel 12.0 Xml;HDR=YES"
- 若为xls格式,保留
Excel 8.0;xlsx格式用Excel 12.0 Xml;xlsb格式用Excel 12.0。
3. 配置执行权限与路径访问
- 确保执行SSIS包的账户(SQL Server Agent服务账户/SSISDB执行账户)对UNC路径拥有读取/写入权限,手动登录服务器测试能否直接打开目标Excel文件。
- 避免使用映射网络驱动器,全程使用完整UNC路径(如
\\server\share\file.xlsx)。
4. 调整SSIS运行时设置
- SSISDB执行包:进入执行配置的“高级”选项,若安装64位ACE驱动,取消勾选“使用32位运行时”;若需32位运行,确保32位驱动无冲突安装。
- Visual Studio中:进入项目属性→“调试”选项卡,设置
Run64BitRuntime为True(64位运行)或False(32位运行),与驱动位数一致。
5. 解决0x80004005错误的额外步骤
- 检查Excel文件是否被其他程序锁定(如Excel客户端未关闭),关闭所有占用进程。
- 若文件为跨机器复制/下载所得,右键文件→“属性”,勾选“解除锁定”。
- 临时将Excel文件复制到本地磁盘测试,排除网络权限或UNC路径问题。
- 验证ACE驱动注册表权限:打开注册表编辑器,导航到
HKEY_CLASSES_ROOT\CLSID\{00000601-0000-0010-8000-00AA006D2EA4}(ACE 16.0的CLSID),确保执行账户拥有读取权限。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

