保留错误(-5016):没有这种错误的信息&驱动程序的SQLSetConnectAttr失败

一、问题描述

之前写了一个软件,对Excel的操作使用了CSpreadSheet来实现,因为在本机和虚拟机上运行都没有问题,只有在一位同事的PC上才报错,当时比较忙,以为可能是没有装SQLServer或者是非Microsoft Excel之类的小原因就没有继续追究,后来就忘记了,直到今天客户那边也出现了这个问题才仔细排查了一下。
报错信息:

保留错误(-5016):没有这种错误的信息
...
[行为信息]
...
驱动程序的SQLSetConnectAttr失败

二、排查过程

因为是软件进行Excel操作时才会报错而且有驱动程序的SQLSetConnectAttr失败这个报错信息,初步判断是CSpreadSheet中使用ODBC方式操作Excel导致,找了一圈SQLServer的配置和服务问题未果,直到寻找到对于ASP+Excel报错[ODBC Microsoft EXCEL 驱动程序] 保留错误(-5016)没有这种错误的消息的解决方案:
进销存系统导入excel文件时提示[ODBC Microsoft EXCEL 驱动程序] 保留错误(-5016)没有这种错误的消息
该错误由于微软的一个更新补丁导致:
Microsoft Jet 数据库引擎远程执行代码漏洞的安全更新说明:2017 年 10 月 10 日
CSpreadSheet读写Excel也是通过ODBC方式,我卸载KB4041678补丁后解决了客户的问题,推而广之,其他应用ODBC方式读写Excel的软件在此更新后应该会出现类似错误,可以使用同样的解决方案。

三、解决方案

1.卸载对应更新

Windows 7 SP1 and Windows Server 2008 R2 SP
KB4041681-- 2017-10 Security Monthly Quality Rollup for Windows 7 for x86-based Systems
KB4041678 -- 2017-10 Security Only Quality Update for Windows Embedded Standard 7 for x64-based Systems

Windows 8.1 and Windows Server 2012 R2
KB4041693 -- 2017-10 Security Monthly Quality Rollup for Windows 8.1 for x86-based Systems
KB4041687 -- 2017-10 Security Only Quality Update for Windows 8.1 for x86-based Systems

Windows 10 and Windows Server 2016 (version 1607)
KB4041691-- 2017-10  Cumulative Update for Windows 10 Version 1607 and Windows Server 2016

Windows 10 and Windows Server 2016 (version 1703)
KB4041676 -- 2017-10 Cumulative Update for Windows 10 Version 1703

控制面板->程序->程序和功能->已安装更新中找到对应版本的补丁右键卸载即可

2.将更新的msexcl40.dll库更改为其他版本

32 bit DLL:
c:\windows\syswow64\msexcl40.dll
64 bit DLL:
c:\windows\system32\msexcl40.dll

BUG版本为4.0.9801.1,我的电脑上的版本为4.0.9801.2没有问题(大概是微软后面更新把这个异常版本修复了,不过懒得去找哪个版本的更新了,就把这个传到度盘分享一下吧),或者更换为4.0.9801.0亦可。

你可能感兴趣的:(保留错误(-5016):没有这种错误的信息&驱动程序的SQLSetConnectAttr失败)