使用 c# 在 32 位和 64 位窗口中打开 ms-access .mdb

Posted

技术标签:

【中文标题】使用 c# 在 32 位和 64 位窗口中打开 ms-access .mdb【英文标题】:Open ms-access .mdb in 32 and 64bit windows using c# 【发布时间】:2010-12-16 15:23:08 【问题描述】:

我使用“Provider=Microsoft.Jet.OLEDB.4.0;...”之类的连接字符串来打开 .mdb 数据库。 移动到 64 位计算机,这不再起作用,因为没有 64 位实现。

我的理解是这样做是因为 Jet 已被弃用。 有一种解决方法,您可以将应用程序编译为仅作为 32 位运行。

我们应该搬到哪里去? 是否有可在 32 位和 64 位中运行的新提供程序?

【问题讨论】:

Jet 未被弃用,但您使用的版本不是最新版本。它所有 Windows 副本上都附带的版本,使用起来非常方便,但仅限于 32 位。它可以在 64 位 Windows 上正常工作,就像任何 32 位应用程序一样,因为 64 位 Windows 支持 32 位应用程序。 Jet 的最新版本是 ACE,它有一个 64 位版本,如下所述。 【参考方案1】:

你试过这个SO: 64-bit Alternative for Microsoft Jet吗?

【讨论】:

如果您阅读了这篇文章,您会了解到 Access 没有 64 位驱动程序。他们正在谈论的 ACE 提供程序也是 32 位的。他们建议您将应用程序转换为 sql server 或 sql server compact edition。 @Frederik,Jet 没有 64 位驱动程序;但您可以将其更改为新的 64 位 ACE 驱动程序。 AFAIK,ACE 驱动程序也是 32 位的?我刚刚通过更改我的连接字符串以使用 ACE.OLEDB.12.0 驱动程序并在 x64 模式下运行我的应用程序来测试它并得到异常:'Microsoft.ACE.OLEDB.12.0 驱动程序未注册'。在 x86 模式下运行应用时,它运行良好。 @Frederik,您必须下载 2010 x64 Access 数据库引擎(从目标评论中提供的链接)。几周前我这样做了。不幸的是,虽然它显示在 MS 下载搜索页面中,但它似乎已下线。 我以为几个月前我也这样做了。 :) 我稍后会检查以确保。【参考方案2】:

我们应该搬到哪里去?

SQL Server Express 2008 R2。大约 10 年前宣布迁移到 SQL Server Express。

是否有可在 32 位和 64 位中运行的新提供程序?

你对新的定义是 10 岁 :)

【讨论】:

SQL Server 对于某些应用程序来说可能有点矫枉过正,如果 Access 足以满足这些应用程序的话。 :) 在这种情况下最好使用 SQL ServerCE。 不过,这比 access 赚的还要少。 确实如此。 :) 我有一个在 sql server 上运行的应用程序,并且还需要支持“轻量级”桌面数据库。最终,我选择了 Access,因为 SqlCE 有很多限制。 (当数据库处于共享状态时不支持并发连接,这是显示停止器)。 嗯,“新”取决于参考,在这种情况下,我想到了 Jet,那么您的建议肯定符合新的 :)【参考方案3】:

将应用程序的目标平台更改为 x86 而不是“任何 cpu”。 这样,您的应用程序将在 64 位系统上以 WOW64 模式运行,并将使用 32 位 Jet 提供程序。

【讨论】:

+1 获得最优雅的传统解决方案。我还建议他们转向 SQL Express 实现以防止将来出现问题。作者可以轻松地让您的应用程序安装并在安装时设置 SQL Express 数据库。根据所讨论的链接线程,作者还可以使用支持 64 位的 Office 2010。 是的,到目前为止,这一直是解决方法。问题更多是关于如何继续未来的项目。

以上是关于使用 c# 在 32 位和 64 位窗口中打开 ms-access .mdb的主要内容,如果未能解决你的问题,请参考以下文章

在一个程序中结合 32 位和 64 位 DLL

python32位和64位有啥区别?

32位和64位dll判断

C#如何使用SQLite数据库兼容32位,64位系统

navicat for mysql 64位和32位区别,win7 64位下用32位和64位有区别吗??

如何在64位windows7上同时使用32位和64位的Eclipse