这真的很奇怪:我安装了很好的旧版 Access 2002,我经常使用它。我有一些在 VS 2019 中编写的数据库实用程序,它们引用了 DAO 3.6。所有 exe 和 dll 文件都运行没有问题。
但是将 Visual Studio 更新到版本 2022 后,我无法再在 VS 2022 中打开这些应用程序。它没有找到 DAO 3.6,如果我查看 COM 引用,我可以看到 DAO 3.5 - 但没有 DAO 3.6。
这里有人有同样的问题吗?或者更好...一个解决方案;-)
DAO 3.6 绝对是正确的 COM 注册。
嗯,这将是一个“有点”的问题。
主要问题是 vs2022 是 VS 的第一个版本,现在是 x64 位,而以前的版本(如 2019)是 x32 位。
因此,当您尝试添加 DAO 3.6 引用时,它不会显示,因为 vs2022 是 x64 位,因此它看不到 DAO 引用。
现在,我可以指出,使用 .net 中的 DAO 并不是一个好主意,因为就此事而言,DAO(或 ADO)是非托管代码(这意味着非 .net 对象)。
如果您还没有大量代码,那么我强烈建议您采用 ado.net,然后使用 oleDB 提供程序。该设置可以工作,并且可以很好地与 Access 数据库配合使用。
但是,您可以直接 DAO 引用。
您可以使用 Office 互操作程序集(从 Word 到 Excel 到 Access 的所有办公产品都有相应的程序集)。
因此,从项目中,去管理 nuget 包,并为 DAO 添加 Access 互操作程序集。
这个:
因此,您现在可以直接在 vb.net 代码中使用 DAO,即使使用 vs2022 也可以这样做。
因此,代码可以如下所示 - 我们需要导入,因此位于顶部:
Imports Microsoft.Office.Interop.Access
现在,你可以编写纯 DAO 代码,像这样说:
Dim myDBEngine As New Dao.DBEngine
Dim myCurrentDB As Dao.Database
myCurrentDB = myDBEngine.OpenDatabase("C:\test\test444.accdb")
Dim rstData As Dao.Recordset
rstData = myCurrentDB.OpenRecordset("SELECT * FROM tblHotelsA")
Do While rstData.EOF = False
Debug.Print(rstData("HotelName").Value)
rstData.MoveNext()
Loop
rstData.Clone()
另外,请记住,您现在已经/必须强制您的项目以 x32 位运行。你不能再使用任何CPU,因为在过去,VS是x32位,当你点击f5时,你最终会得到一个“进程中”的x32位运行进程。现在,按 f5 将获得 x64 位程序!!!
因此,您必须强制 vb.net 项目为 x32 位。
因此这个设置:
因此,vs2022 无法再看到非 .net x32 位对象,但您可以通过执行上述操作来解决此问题。
但是,实际上,但实际上,我会考虑使用 ADO.net,因此您不会在 vb.net 代码中使用或处理 DAO 和一些非托管对象。
当然,这实际上取决于您有多少代码,以及是否可以切换到 ado.net,并且不再使用 DAO。
我还应该指出,自 2017 版以来,MS-Access 不再需要 DAO 引用,并且 DAO 对象库现在内置于 Access 中。这是由于从原来的 JET 数据引擎转变为现在使用 Access 附带的较新的 ACE 数据引擎。
在大多数情况下,虽然您不需要(或拥有)ms-access 中的 DAO 引用,但您仍然可以在代码中使用 DAO 对象,这在 VBA + Access 代码中是很好的标准做法。
所以,以上就是让DAO进入vs2022的一种方法。然而,如前所述,我真的不认为直接在 vb.net 代码中使用那些非托管 DAO 对象是一个好主意。
更好的方法是在项目中设置连接,然后使用 ODBC 或 Access,.net 中的 oleDB 提供程序......
因此,我建议您使用办公室互操作程序集。