[郑重声明,曾经的“Jet”的正式名称现在是“Access 数据库引擎”。]
对于 ACE(Access2007 引擎 .accdb 格式)功能,它必须是 ACEDAO。
对于 Jet 4.0 功能,它必须是 ADO 经典。
对于 Jet 3.51 及更早版本的功能,请选择 ADO 或 DAO。两者都有优点和缺点。 Access 数据库引擎的绝大多数功能对于两者都是通用的;相互排斥的功能是有争议的边缘。也许是一种生活方式的选择,但没什么大不了的。聪明的编码员充分利用了两者的优点:)
我已经用过很多次了,ADO 是我个人的偏好。它比 DAO 更现代,因此在架构上它是一种改进:更扁平的对象模型,没有 DAO 的拆卸问题等。更多的属性和方法并引入了事件(DAO 没有),例如用于异步连接和获取记录。 ADO 记录集可以断开连接、分层和构造,而 DAO 记录集则不能。基本上,他们吸收了 DAO 的优点并使其变得更好。
DAO 并非没有优点。其一,对于 Access/Jet,您会发现比 ADO 更多的 DAO 代码示例。
附:出于某种原因,喜欢 DAO 的人确实不喜欢 ADO。忽略宣传。 ADO 并未被弃用。 ACE 有一个 OLE DB 提供程序,并且是目前在 64 位中使用 ACE 的唯一方法。 ADO.NET 没有取代 ADO classic,就像 VB.NET 没有取代 Access 项目中的 VBA6 一样。
编辑:只是澄清一下,“对于 Jet 4.0 功能,它必须是 ADO 经典”,这是因为 DAO 3.6 仅对 Jet 4.0 的新功能进行了一些增强。例如,对于DECIMAL
您无法指定比例/精度的数据类型。 DAO 完全缺少其他功能。例如,您可以在 Jet 4.0 中使用 DAO(或 ACE 中的 ACEDAO)执行以下操作吗?
CREATE TABLE Test (
col1 CHAR(4) WITH COMPRESSION DEFAULT '0000' NOT NULL,
CHECK (NOT EXISTS (
SELECT T1.col1
FROM Test AS T1
WHERE T1.col1 <> '0000'
GROUP
BY T1.col1
HAVING COUNT(*) > 1
))
);
(提示:具有表级数据完整性约束的可压缩固定宽度文本列。)不,你不能。
AFAIK 对 ACEDAO 的唯一增强是针对新的 ACE 功能,即它们没有回去填补 DAO 中的 Jet 4.0 空白。为什么他们应该这样做?我们仍然有 ADO 来填补空白。更好的是团队更高效地利用时间,比如解决那个烦人的问题DECIMAL
排序错误,对我来说 ACE 最好的事情;-)