升级Access2016后.NET6 Web API上传Excel报错:ACE OLEDB未注册
.NET6 Web API 升级Access 2016后Excel上传问题解决
核心问题分析
升级Access 2016后出现的The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine报错,以及大文件数据不全问题,本质是ACE驱动版本与系统/项目位数不兼容,加上OLEDB默认的数据类型扫描机制导致部分行被忽略。
具体解决步骤
1. 安装匹配位数的Access 2016 ACE驱动
- 卸载系统中已有的ACE驱动(避免版本冲突)
- 下载对应系统位数的Microsoft Access Database Engine 2016 Redistributable:
- 64位系统装64位驱动,32位系统装32位驱动
- 若已安装32位Office,安装64位驱动时需用被动安装命令绕过位数检测:
setup.exe /passive
2. 调整项目与连接字符串配置
- 项目位数设置:右键项目→属性→生成→目标平台,选择与ACE驱动一致的位数(x64或x86),禁用AnyCPU(Web环境下AnyCPU可能默认走32位,与64位驱动不兼容)
- 修正连接字符串:
针对.xls文件:
针对.xlsx文件(兼容性更好):string con = $"Provider=Microsoft.ACE.OLEDB.16.0;Data Source={path};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;MAXSCANROWS=0;'";
其中string con = $"Provider=Microsoft.ACE.OLEDB.16.0;Data Source={path};Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;MAXSCANROWS=0;'";MAXSCANROWS=0会强制OLEDB扫描所有行确定列数据类型,避免因前几行数据类型与后续行不一致导致的行丢失。
3. 验证驱动注册状态
打开注册表编辑器,检查对应路径是否存在:
- 64位驱动:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE - 32位驱动:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE
存在则说明驱动注册成功。
内容的提问来源于stack exchange,提问作者Devesh
相关产品推荐
相关产品推荐

