升级Windows 11与Office 2021 Pro后,Visual Studio 2019程序通过OleDb打开Excel文件触发System.AccessViolationException问题排查
解决Office 2021下OleDb连接Excel的AccessViolationException问题
这个内存访问异常在升级到Office 2021 + Windows 11后很常见,核心原因大多是位数兼容性或者ACE驱动配置问题,结合你的代码和场景,给你一步步的解决方案:
1. 优先排查:位数匹配问题(最可能的根因)
Office 2013默认很多是32位,而Office 2021现在更多默认64位,这会导致你的程序和ACE驱动(OleDb依赖的核心组件)位数不兼容,直接触发内存访问错误:
第一步:确认Office 2021的位数
打开Excel 2021 → 点击「文件」→「账户」→「关于Excel」,查看是32位还是64位版本。第二步:匹配VS项目的编译平台
在Visual Studio 2019中右键你的项目 → 「属性」→ 「生成」标签页:- 如果Office是32位,把「平台目标」设为
x86; - 如果Office是64位,设为
x64; - 绝对不要选
Any CPU(除非你明确取消「首选32位」选项,且和Office位数完全一致)。
- 如果Office是32位,把「平台目标」设为
第三步:确保ACE驱动位数一致
如果Office 2021是64位,默认会自带64位ACE驱动;如果是32位,自带32位驱动。如果你的程序位数和Office一致,但还是报错,可以单独下载对应位数的ACE驱动安装包(注意:不要混合安装32和64位驱动)。
2. 调整连接字符串的兼容性配置
你的连接字符串框架没问题,但可以优化几个参数提升Office 2021的兼容性:
修改后的连接字符串模板:
Dim EXCEL_Connection_String_NoHeader As String = "Provider=Microsoft.ACE.OLEDB.16.0; Data Source=""XXX""; Extended Properties=""Excel 16.0 Xml;HDR=NO;IMEX=1"""
关键调整点:
- 明确指定
Microsoft.ACE.OLEDB.16.0作为Provider(你已经通过替换实现了,这部分没问题); - 新增
IMEX=1参数:强制驱动将混合数据类型的列以文本格式读取,避免驱动在猜测数据类型时出现内存异常,这在Office 2021的驱动中兼容性更好; - 确保
Excel 16.0 Xml对应你的文件格式:如果是.xls旧格式,要改成Excel 16.0(不带Xml)。
3. 辅助排查:修复Office安装与权限
如果上面两步都没解决,可以尝试:
- 修复Office 2021:打开控制面板 → 「程序和功能」→ 找到「Office 2021 Pro」→ 右键「更改」→ 选择「快速修复」(不行就选「在线修复」),修复可能损坏的ACE驱动组件;
- 权限验证:确保你的程序有Excel文件所在文件夹的读写权限,或者尝试以管理员身份运行程序(Win11的UAC限制可能比Win10更严格)。
按这个顺序排查,大概率能解决你的问题——毕竟你没修改代码,核心就是环境升级后的兼容性问题,位数不匹配是最常见的触发点。
内容的提问来源于stack exchange,提问作者Fred_Buses
相关产品推荐
相关产品推荐

