64位C#程序连接第三方Access数据库的适配问题求助
64位C#应用连接加密旧版Access数据库的解决办法
问题根源
Microsoft.Jet.OLEDB.4.0仅提供32位版本,64位应用无法调用,必须替换为ACE系列驱动。- 使用
Microsoft.ACE.OLEDB.12.0报错,是因为ACE驱动默认不兼容Access 95/97这类旧格式数据库,且密码参数的搭配逻辑需要调整。
可用的64位连接字符串
针对加密的旧版Access数据库,使用以下连接字符串:
string connectionString = string.Format( "Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Jet OLEDB:Database Password={1}; Extended Properties=\"Jet OLEDB:Engine Type=4; Persist Security Info=False\";", yourDbPath, yourDbPassword );
- Engine Type参数调整:根据数据库实际版本修改:
- Access 95 →
Engine Type=3 - Access 97 →
Engine Type=4 - Access 2000-2003 →
Engine Type=5
- Access 95 →
- 也可将
Microsoft.ACE.OLEDB.12.0替换为Microsoft.ACE.OLEDB.16.0(对应Office 2016及后续版本),兼容性更佳。
必备前置操作
- 安装64位ACE驱动:
- 未安装32位Office的用户,直接安装官方提供的64位Microsoft Access Database Engine redistributable包。
- 已安装32位Office的用户,直接安装会产生冲突,需通过命令行被动安装:
msiexec /i AccessDatabaseEngine_X64.exe /passive
- 设置项目目标平台为x64:避免使用
Any CPU模式,防止64位系统下应用自动切换为32位运行,导致驱动调用失败。
额外排查点
- 验证64位ACE驱动注册状态:打开64位命令提示符,执行
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE"(对应16.0版本),有返回结果即代表注册成功。 - 若仍出现密码相关错误,可尝试将
Jet OLEDB:Database Password={1}替换为Password={1},部分旧版ACE驱动对参数解析存在差异。
内容的提问来源于stack exchange,提问作者CM99
相关产品推荐
相关产品推荐

