我的.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中获得,我如何解决这个问题而不需要安装其他东西?
答案 0 :(得分:0)
原来答案是等3年。正如西蒙在对我的问题的评论中提到的那样 - ACE/DAO 库“处于泡沫中”,可用于 Office 但不适用于外部应用程序。最后在 2020 年,MS 决定再次提供它们: Breaking ACE Out Of The Bubble