【发布时间】: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 已安装但配置在注册表的一部分中,使其在自己的进程之外不可见。