【问题标题】:How to accommodate both 32 bit and 64 bit odbc drivers如何同时容纳 32 位和 64 位 odbc 驱动程序
【发布时间】:2020-05-14 19:31:35
【问题描述】:

我正在编写一个 c# WPF 应用程序,其中一个设计要求是能够从 Microsoft Access 数据库加载数据。我对此主题有很多与 MS Access 驱动程序相关的问题:

  1. 如果我们的应用程序编译为 64 位,它是否能够运行 32 位 odbc 驱动程序?当我以 64 位运行我的应用程序时,访问 32 位驱动程序时出现错误,我想我在某处读到无法从 64 位应用程序访问 32 位 odbc 驱动程序。

  2. 如果我们在客户端计算机上安装 64 位 Access 驱动程序,并且他们也已经安装了 32 位 Access 驱动程序,会不会搞砸?默认情况下,如果 32 位驱动程序已经存在,Microsoft 不会让您安装 64 位驱动程序。有一种解决方法(在安装时使用 /passive 命令),但我担心同时拥有两个驱动程序可能会使 Access 出现问题。

  3. 我有什么遗漏吗?是否有其他人曾经能够为其应用程序访问正确的 Odbc 驱动程序的解决方法?

【问题讨论】:

    标签: c# ms-access odbc driver


    【解决方案1】:

    让我们逐点回答:

    1. 如果我们的应用程序编译为 64 位,是否能够运行 32 位 odbc 驱动程序?

    不,不会的。

    1. 如果我们在客户端计算机上安装 64 位 Access 驱动程序,并且他们也已经安装了 32 位 Access 驱动程序,会不会搞砸?

    是的,或者至少,您的里程可能会有所不同。我见过有人这样做并且需要完整的 Office 卸载 + 重新安装才能让 Access OLEDB 提供程序再次工作,而其他人则完全没有问题。 32 位 2010 数据库引擎的问题似乎比 2016 少,但不是您想在生产应用程序中做的事情。

    1. 我有什么遗漏吗?

    嗯,这里有很多选择。例如,您可以使用与默认驱动程序不冲突的第三方 ODBC 驱动程序,例如 mdbtools。您可以使用 DLL 代理来生成 32 位 COM 对象并使用 DAO 而不是 ODBC 驱动程序来与数据库交互。您可以自己为 64 位应用程序提供一个 32 位 COM 对象,让它与 ODBC 驱动程序通信,并使用 DLL 代理与其接口。还有无数更多的选择。不过,没有一个比使用 ODBC 驱动程序更完美,而且通常只提供 32 位和 64 位版本并让用户选择与其 Office 安装匹配的版本。

    【讨论】:

    • 非常好的反馈,埃里克。谢谢。
    • @erik-a 您能否提供指向您所指的第 3 方驱动程序的链接?我知道这篇文章是关于 ODBC 在 Windows 机器中连接 Access 数据库的。但是我发现的mdbtools 项目是关于从 UNIX/Linux 环境连接 Access。谢谢
    • @abu 有多个,例如this cdata one。但是,我最近没有检查过质量和兼容性,因此请自行研究和尝试
    • 感谢@ErikA,但 mdbtools(适用于 Linux)是免费/开源的。 MS 提供的 Access 驱动程序也是免费的。但是您提到的 cdata 现在每年花费 399 美元。所以我想知道你第一次提到 mdbtools 是什么意思。您知道 Windows 中针对此问题的任何免费解决方案吗? (希望是 ODBC,这样我就可以在要迁移到的新机器上重用我当前基于 pyodbc 的代码)。提前致谢
    • 抱歉,软件推荐是题外话。如果 99% 的用户都可以使用 Access 并且市场非常狭窄,那么您就不能指望东西是免费的。当然,您可以使用 WSL +mdbtools 或为 Windows 编译 mdbtools 并使用 C/命令行 API afaik
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2011-10-30
    相关资源
    最近更新 更多