ACEDAO DbEngine 可从 Access 获得,但不能从 .NET 获得
ACEDAO DbEngine available from Access but not from .NET
我的 .NET 应用程序正在使用 MS Access 数据库并使用 "Microsoft Access database engine Data Access Object Library" (ACEDAO.DLL) 读取数据库。但它只有在我安装 Microsoft Access 数据库引擎时才有效。我的目标是避免它。例如 - 目前我安装了 Office 2013 x64 和 Access,但它不工作。
如果我添加 COM 引用 and/or 使用 Microsoft.Office.Interop.Access.Dao.dll - 它失败并显示 COMException CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} 未注册。
如果我尝试使用 Type.GetTypeFromProgID("DAO.DBEngine.120") 的后期绑定 - 它 returns 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 获得的内容,以及如何在无需安装任何其他东西的情况下解决此问题?
原来答案只是等了三年。正如 Simon 在对我的问题的评论中提到的那样 - ACE/DAO 图书馆“处于泡沫中”,可用于 Office 但不可用于外部应用程序。最终在 2020 年,MS 决定再次提供它们:
Breaking ACE Out Of The Bubble
我的 .NET 应用程序正在使用 MS Access 数据库并使用 "Microsoft Access database engine Data Access Object Library" (ACEDAO.DLL) 读取数据库。但它只有在我安装 Microsoft Access 数据库引擎时才有效。我的目标是避免它。例如 - 目前我安装了 Office 2013 x64 和 Access,但它不工作。
如果我添加 COM 引用 and/or 使用 Microsoft.Office.Interop.Access.Dao.dll - 它失败并显示 COMException CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} 未注册。
如果我尝试使用 Type.GetTypeFromProgID("DAO.DBEngine.120") 的后期绑定 - 它 returns 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 获得的内容,以及如何在无需安装任何其他东西的情况下解决此问题?
原来答案只是等了三年。正如 Simon 在对我的问题的评论中提到的那样 - ACE/DAO 图书馆“处于泡沫中”,可用于 Office 但不可用于外部应用程序。最终在 2020 年,MS 决定再次提供它们: Breaking ACE Out Of The Bubble