ACEDAO DbEngine可从Access获得,但不能从.NET获得

时间:2017-09-28 06:49:51

标签: .net ms-access com

我的.NET应用程序正在使用MS Access数据库并使用" Microsoft Access数据库引擎数据访问对象库" (ACEDAO.DLL)读取数据库。但它只有在我安装Microsoft 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数据库引擎或Access Runtime。那不是我要找的东西。我只是试着理解为什么Access中提供的东西不能从更强大的.NET中获得,我如何解决这个问题而不需要安装其他东西?

1 个答案:

答案 0 :(得分:0)

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