SQLyog以excel文件导入mysql数据库失败:[Microsoft][ODBC Excel 驱动程序] 保留错误 (-5016); 没有这种错误的消息

来源:互联网 发布:阿里云 paas iaas 编辑:程序博客网 时间:2024/06/06 02:53

前言

之前经常使用excel导入数据库的方式来进行数据填充,于2017年11月部署一个项目的时候,上线前发现导入数据失败,显示报错为[Microsoft][ODBC Excel 驱动程序] 保留错误 (-5016); 没有这种错误的消息。当时情况紧急,幸好数据量不多,便只好手动导入了全部的二十余条数据。想必是驱动程序的原因,后续便通过更换驱动程序解决了这个问题。但是从本质上来说,解决这种问题的根本方案,应该是即使更换其他更新更好的数据库操作软件,而不是降低补丁版本来继续维持向后的兼容

情况概述

将wps保存的excel文件,用SQLyog导入mysql数据库,会提示错误为[Microsoft][ODBC Excel 驱动程序] 保留错误 (-5016); 没有这种错误的消息。起初怀疑是wps没有office驱动的原因,结果重新安装好office之后,用office保存的excel文件仍然报错。

上网查阅资料,由于微软在2017-10-10更新了安全补丁(KB4041678,KB4041681),更新了Microsoft JET Database Engine导致asp、asp.net等无法读取Excel。因此会有下面这些报错情况

  • Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
  • [Microsoft][ODBC Excel 驱动程序] 保留错误 (-5016); 没有这种错误的消息。
  • 外部数据库驱动程序中(1)的意外错误

解决方案

方案A
网上查得,卸载微软安全补丁(KB4041678,KB4041681)即可,(如何卸载Windows系统更新补丁)。打开 控制面板->程序->程序和功能->已安装更新 ,即可看到windows更新的列表。

windows更新的列表

点名称可按名称排序,但是在里面本人并未找到安全补丁 KB4041678 和 KB4041681,怀疑是不是360做了奇奇怪怪的更新而控制面板却没有内容,因此转而使用方案B。

方案B

该解决方案来自百度知道用户:fisheso

核心原理:直接改动驱动文件msexcl40.dll
在微软打补丁后异常的新版驱动文件为:4.0.9801.1版本的msexcl40.dll,大小为337KB,我们需要做的是,改变导入时用到的驱动文件。
这个改动有两种方法,其一是备份原驱动文件,复制旧版驱动文件到原文件目录下。
其二是更改注册表的文件指向,复制旧版驱动文件到源目录下(不要同名),在注册表内修改使得导入时执行旧版驱动文件。此处采用其二。

1、在系统盘C盘内搜索文件msexcl40.dll ,如果是32位系统,一般会在C:\Windows\System32\下,如果是64位系统一般会在C:\Windows\SysWOW64\下。

2、找到这个文件之后,检查一下这个文件的大小,如果是337KB,说明是新版的驱动文件导致的原因。如果不是,那可能不是该驱动导致的导入失败,需要排除一下其他的原因。

3、获取旧版332KB版本的4.0.9801.0的驱动文件msexcl40.dll,或者或更早版本的:比如4.0.9502.0

4、在网上多有查到下载地址,但是出于安全考虑没有随便下载,找同事的电脑要了一份332KB的驱动文件,改名为yfmsexcl40.dll后复制到了原文件的目录下。我的电脑是32位系统的,同事的电脑是64位的,但是好像这个驱动程序与系统无冲突,可以正常使用,把驱动文件上传到了网盘,下载地址为:https://pan.baidu.com/s/1eSElmSU,密码是j56b,如果被封了请联系 test@szer.me
【注意:对文件目录下的驱动文件改名、删除、移动都需要系统管理员权限】

5、通过开始菜单键+R打开运行,输入regedit,进入注册表并用ctrl+F搜索msexcl40.dll。(一般在计算机\HKEY_LOCAL_MACHINE\SOFTWARE\里,再找到Microsoft\Jet\4.0\Engines\Excel,64位系统可参照文末的链接进行操作)

打开注册表

双击win32,把Excel的win32数值数据,从原来的xxxxx....\msexcl40.dll改成之前同目录下复制的旧版驱动文件xxxxxx...\yfmsexcl40.dll(若之前文件改名或复制路径成其他,则路径名文件名为其他)

这里写图片描述

6、然后就可以正常使用SQLyog以excel文件导入mysql数据库了。

参考

进销存系统导入excel文件时提示[ODBC Microsoft EXCEL 驱动程序] 保留错误(-5016)没有这种错误的消息

Microsoft Jet 数据库引擎远程执行代码漏洞的安全更新说明:2017 年 10 月 10 日

[综合应用] Excel导入外部数据出现问题的成因及解决方案

阅读全文
1 0