已安装Access数据库引擎仍提示Microsoft.ACE.OLEDB.12.0未注册的求助
ASP.NET导入Excel(.xlsx)时OLE DB驱动注册错误排查
问题描述
导入Excel文件时触发错误:
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered
已尝试安装32位+64位Microsoft Access Database Engine 2016 Redistributable、配置连接参数,但问题未解决。后续切换开发服务器为32位后,出现新错误:localhost is currently unable to process this request。
环境信息:
- 已安装Microsoft Access Database Engine 2016 Redistributable(32位+64位)
- Visual Studio Community 2019 Version 16.11.11
- 已安装Office 2019
当前使用的读取代码:
string getcollum = "SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 14.0;Database=" + pathget + "', [UPDATE_Success$])";
核心问题排查与解决步骤
1. 清理冲突的ACE引擎版本
ACE引擎的32位和64位版本无法共存,需根据Office版本保留对应位数的引擎:
- 若Office 2019是64位,卸载32位ACE引擎,保留64位版本;
- 若Office 2019是32位,卸载64位ACE引擎,保留32位版本。
2. 匹配项目平台与ACE引擎位数
打开Visual Studio,右键项目→属性→生成→平台目标:
- 对应64位ACE引擎,选择
x64; - 对应32位ACE引擎,选择
x86; - 禁用
Any CPU选项,避免自动切换位数导致不匹配。
3. 调整开发服务器(IIS Express)位数
进入工具→选项→项目和解决方案→Web项目:
- 使用64位ACE引擎时,勾选“使用64位版本的IIS Express用于网站和项目”;
- 使用32位ACE引擎时,取消该勾选。
4. 替换OPENROWSET为稳定的OleDb连接方式
OPENROWSET依赖SQL Server配置且易受权限影响,建议改用OleDbConnection直接读取:
using System.Data.OleDb; string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={pathget};Extended Properties='Excel 12.0 Xml;HDR=YES;'"; using (OleDbConnection conn = new OleDbConnection(connectionString)) { conn.Open(); DataTable schema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string sheetName = schema.Rows[0]["TABLE_NAME"].ToString(); string sql = $"SELECT * FROM [{sheetName}]"; using (OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn)) { DataTable dt = new DataTable(); adapter.Fill(dt); // 处理读取到的数据 } }
5. 排查“localhost无法处理请求”的具体原因
在Web.config中添加配置显示详细错误:
<system.web> <customErrors mode="Off"/> </system.web> <system.webServer> <httpErrors errorMode="Detailed"/> </system.webServer>
根据弹出的具体错误信息(如权限不足、驱动未找到等)针对性解决。
6. IIS部署额外配置(若后续部署到服务器)
- 应用池设置:“启用32位应用程序”选项需与ACE引擎位数一致(64位引擎设为
False,32位设为True); - 权限配置:确保应用池标识拥有Excel文件所在目录的读取权限。
内容的提问来源于stack exchange,提问作者Chim Di Tru
相关产品推荐
相关产品推荐

