未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

时间:2021-12-24 10:23:33
【错误描述】

在做Excel导入的时候,报的这个错,之前是可以导入成功的,后来重装了一次系统,重装了office,然后就报这个错了,我的office是16的。

错误说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

【报错地方】
           string strFileType = System.IO.Path.GetExtension(strSavaPath);
            if (strFileType == ".xls")
            {
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strSavaPath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
            }
            else
            {
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strSavaPath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
            }
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
【错误分析】

当你尝试64位的Access运行32位的代码时,则会发生运行时错误。
这个错误的根本原因就是应用程序(32 位代码)和与 64 位 Microsoft Access 一同安装的 64 位 ACE 提供程序之间的版本不匹配,造成了错误“’Microsoft.ACE.OLEDB.12.0’ 提供程序未在本地计算机上注册”。

【解决办法】


1.下载office驱动程序,安装数据连接组件,点击下载链接
2.将 ConnectionString 属性的 Provider 参数设置为“Microsoft.ACE.OLEDB.12.0”如果要连接到 Microsoft Office Excel 数据,将“Excel 12.0”添加到 OLEDB 连接字符串的扩展属性中。核对了一下我之前写的没有问题,如果有问题的可以参考我上面的代码修改一下。
3.在运行框用inetmgr命令打开IIS管理器,选择该应用程序的应用程序池——>高级设置——>启动32位应用程序——>true
如图示:
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
经过验证可以解决问题。如果没有解决的话,再修改程序中的一个地方,在项目属性中找到 生成–PlatformTarget设置为X64位。
如图示:
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

感谢您的阅读。。