【问题标题】:ACEDAO DbEngine available from Access but not from .NETACEDAO DbEngine 可从 Access 获得,但不能从 .NET
【发布时间】:2018-03-09 19:34:26
【问题描述】:

我的 .NET 应用程序正在使用 MS Access 数据库并使用“Microsoft Access 数据库引擎数据访问对象库”(ACEDAO.DLL) 来读取数据库。但它只有在我安装 Microsoft Access Database Engine 时才有效。我的目标是避免它。例如 - 目前我安装了带有 Access 的 Office 2013 x64,但它不起作用。

如果我添加 COM 引用和/或使用 Microsoft.Office.Interop.Access.Dao.dll - 失败,COMException CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} 未注册。

如果我尝试对 Type.GetTypeFromProgID("DAO.DBEngine.120") 使用后期绑定 - 它会返回 null。

不管我如何构建应用程序 - AnyCPU、x86、x64 - 它都不起作用。

同时,在同一台计算机上,如果我从 Access 执行相同的操作 - 它可以工作!我两个都可以

Set dbe = New DBEngine
Set db = dbe.OpenDatabase(filePath)

Set dbe = CreateObject("DAO.DBEngine.120")
Set db = dbe.OpenDatabase(filePath)

它不会失败。

请不要建议安装 Microsoft Access Database Engine 或 Access Runtime。这不是我要寻找的。我只是想了解为什么更强大的 .NET 无法使用 Access 提供的某些东西,以及如何在无需安装其他任何东西的情况下解决此问题?

【问题讨论】:

  • .NET 可能很强大,但它仍然需要驱动程序才能与数据库通信。您不能使用不安装 Access 本身或 Access Redistributable 或 Runtime 的 Access 数据库。如果没有其中一个,您只能使用带有 .NET 且没有特定驱动程序的旧 MDB/Jet4 数据库。没有办法解决这个问题。
  • @SimonMourier 我已经安装了 Access
  • 您说过要避免安装 Access。请澄清您的问题。
  • @SimonMourier 我说过要避免安装 Microsoft Access Database Engine 或 Access Runtime - 这是可以从 MS 下载的不同的单独安装包。例如第一个可以在这里microsoft.com/en-us/download/details.aspx?id=13255。如果我安装它,.NET 代码开始工作。我的目标是让它工作而不需要安装除 Microsoft Access 之外的任何其他东西
  • 好的,知道了。您是否使用 Office 即点即用:social.msdn.microsoft.com/Forums/expression/en-US/…?在这种情况下,这可能是不可能的,因为 Access 存在于自己的“泡沫”中。 ACEDAO.dll 已安装但配置在注册表的一部分中,使其在自己的进程之外不可见。

标签: .net ms-access com


【解决方案1】:

原来答案就是等3年。正如西蒙在 cmets 中对我的问题所提到的那样 - ACE/DAO 库“处于泡沫中”,可用于 Office,但不适用于外部应用程序。最后,在 2020 年,MS 决定再次提供它们: Breaking ACE Out Of The Bubble

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2013-12-06
    • 2023-01-28
    • 2021-10-03
    • 2018-05-24
    • 2022-07-22
    • 1970-01-01
    • 2020-07-22
    • 2015-04-05
    相关资源
    最近更新 更多