我的计算机同时安装了64位Office和Access 2016以及32位Access 2010 Redistributable。
我的VB.NET程序使用OleDb类来读取和写入存储在.accdb文件中的数据。
如果我使用AnyCPU选项编译它,它将暂停并显示一个“Microsoft.ACE.OLEDB.12.0提供程序未注册”的异常,除非我设置了“prefer 32 bit”选项。
但是我的整个应用程序不会受益于64位处理,它将以32位(IntPtr.Size = 4
)
为什么? .NET OleDb类不应该找到Access 2016 64bit附带的64位提供程序吗?
我会感谢任何帮助我理解这里发生的事情的人,并希望能指导我修复它。
答案 0 :(得分:3)
您可能已安装了Office 2016的即点即用版本。According to Microsoft:
Office的即点即用安装在本地操作系统上的隔离虚拟环境中运行。 [...]您必须从以下某个源安装Microsoft Access数据库引擎的MSI安装,以便调用应用程序可以找到[Microsoft.ACE.OLEDB.12.0 OLEDB提供程序]。
因此,您有以下选择:
摆脱32位访问运行时并安装,例如,the 64-bit version of the Access 2013 Runtime或
坚持32位。没有受支持的方法在同一台计算机上的和 32位和64位版本中安装Microsoft.ACE.OLEDB.12.0驱动程序。 (是的,它是愚蠢的)。可替代地,
您可能希望切换到另一个数据库(例如SQL Sever Express或SQLite)。 Office产品和64位产品的结合往往会引起很多麻烦。