将 32 位 VB.Net 连接到 64 位 Access .ACCDB
Posted
技术标签:
【中文标题】将 32 位 VB.Net 连接到 64 位 Access .ACCDB【英文标题】:Connecting 32 bit VB.Net to a 64 bit Access .ACCDB 【发布时间】:2019-11-18 15:45:57 【问题描述】:我有一个 VB.net 应用程序,我正在尝试升级以使用 企业强制 64 位 Access .accdb 数据源。我已经尝试安装 32 位 AccessDatabaseEngine.exe,但它不会安装,因为机器上有完整的 64 位 Office 安装。 .Net 应用程序不会连接到 64 位 ODBC DSN 或 ACE.OLEDB 提供程序(说它未注册)。 由于包含一些自定义的 32 位 .DLL,我未能成功将此应用程序编译为 x64 应用程序。
有没有办法让 32 位 .Net 应用程序使用 64 位 Access 数据源?
【问题讨论】:
这能回答你的问题吗? Hand Install of 64-bit MS Access ODBC drivers when 32-bit Office is present 在64位系统上安装32位ODBC驱动也是一样的。无法从 64 位应用程序使用 64 位驱动程序。 您的应用真的需要 32 位吗? -- Access 没有 64/32 位格式,无论安装什么版本的 Office,文件都是一样的。如果您的应用程序必须是 32 位的,出于某种原因,您有 2 个提供程序:Microsoft.ACE.OLEDB.12.0
和 Microsoft.ACE.OLEDB.16.0
。查看安装了哪些提供程序并安装另一个的 32 位版本。
如果您的应用程序和 Access 驱动程序之间必须具有跨位数,还有一个替代方法:编写一个与 Access 驱动程序具有相同位数的进程外 COM 服务器,并使用 out-进程服务器与数据库通信。 (COM 服务器可以用 VB.NET 编写,附近有微软的示例代码。)
【参考方案1】:
如果要使用 ACE x64 数据引擎,您必须将 .net 项目强制为 x64 位。在 .net 中,如果您选择“任何 CPU”,那么在大多数情况下,您会得到一个 x32 位的进程内。并且由于 Visual Studio 是 x32 位,因此任何 CPU 或 x86 的设置将始终导致 x32 位运行进程。
现在,如果您选择任何 CPU 和以 x64 运行的其他一些 Windows 进程尝试使用该组件,那么 .net 将使用并启动该 .net 项目或 .dll 作为进程内 x64 进程。
但是,由于您首先启动 .net 程序,因此您必须强制它以 x64 位运行,它应该可以正常工作。
自从个人计算机时代开始以来,您就永远无法混合不同位大小的程序来与另一个作为不同位大小程序运行的程序通信。尤其是在进程内消耗 .dll 的情况。如果您打算将 ACE x64 与 .net 一起使用,那么您只需要确保并强制您的项目始终以 x64 位运行。所以将项目设置设置为 x64,不要使用 x32,或者使用任何 CPU。大多数情况下,任何 CPU 都会以 x32 位进程开始。此外,在 Visual Studio 中,您可以使用各种连接字符串生成器来设置与 ACE 的连接,但如果您点击“测试连接”,它将无法工作,因为 VS 是 x32 位应用程序。因此,要实际测试是否可以连接,您必须运行程序,因为 VS 构建器中的“测试连接”在开发过程中以 x32 位运行。
【讨论】:
找到自定义 DLL 的源代码并重新编译整个东西。以上是关于将 32 位 VB.Net 连接到 64 位 Access .ACCDB的主要内容,如果未能解决你的问题,请参考以下文章
将 64 位 Java 应用程序连接到 32 位 ODBC 驱动程序
如何在 64 位平台上创建连接到 32 位驱动程序的数据源?
当使用 32 位版本的 MySQL 的 .net 连接器连接到 64 位版本的 MySQL 时,我得到“等待表元数据锁定”