作为 SQL Server 前端使用 - ADO 和 DAO 有何区别?

4

我有一个项目将使用Access 2003作为前端,数据将存储在SQL Server中。 Access将通过链接表连接到SQL Server,并将所有数据库逻辑(存储过程、视图)放置在SQL Server中。

考虑到这种设置,是在Access中使用ADO还是DAO更好?这只是个人喜好的问题,还是有一种方法更适合Access作为前端和SQL Server作为数据存储?特别是在使用链接表时。谢谢。

3个回答

3
使用带有ODBC链接表的MDB。由于您正在使用ODBC,因此通过Jet进行连接,因此DAO是数据访问的默认选择。
只有当无法以其他方式完成或性能不佳时才应使用ADO。
简而言之,您可以像构建纯Access应用程序一样构建SQL Server应用程序(假设您构建了一个带有Jet/ACE后端以有效检索数据的应用程序,这应该是易如反掌的),并且仅在默认的Access方法效率低下或无法获得所需结果时才求助于服务器端功能或ADO(例如,在返回记录集的存储过程的情况下需要可编辑记录集)。

一个连接SQL Server的Access前端不是MDB文件(它是ADP文件)。 - Andomar
3
额,什么?请撤销您的踩,因为您是错误的。使用ODBC将MDB作为SQL Server的前端是微软推荐的配置。自五年前起,微软一直在弃用带有SQL Server的ADP,转而使用MDB。原始问题询问DAO,这表明首先没有考虑ADP,因为DAO在ADP中不起作用,因为没有Jet参与。 - David-W-Fenton
Andmar - ADP已经多年甚至十年没有进行任何重大改进。它们也有一些小毛病。 - Tony Toews
@David-W-Fenton:在我看到“你是完全错误的”这句话之后,我的大脑通常会从阅读模式切换到战斗模式,但我会给你一个机会证明自己的 ;) - Andomar
2
感谢您阅读内容而不是被风格所困扰。 - David-W-Fenton

2

相较于链接表的方法,编写穿透查询可以大大提高性能。如果您正在编写Access应用程序,请创建一些本地表以存储某些查询结果。您可以根据需要动态更改穿透查询以及连接到多个数据库的连接信息。

编辑:普遍共识是使用ADO连接到SQL Server/其他数据源,而使用DAO连接到仅限于mdb的数据源。


2
穿透查询可以与链接表一起使用,它们并不互斥。 - webworm
1
链接表和透传查询并不互斥。在合理的情况下使用链接表,在性能要求高时使用其他技术。这样你就可以兼顾两者的优点。此外,对于 SQL Server,通常不需要本地表。 - Tony Toews
1
你对共识的评估是错误的。对于ODBC链接的表,只有在无法通过其他方式完成或者其他方式效率不高时才需要使用ADO。这意味着只偶尔使用ADO(主要是为了获取可编辑记录集,用于那些本来不能编辑的事物,例如返回记录集的存储过程等)。 - David-W-Fenton
1
为了理解Tony的意思,Access/Jet/ACE永远不会拉下整个MDB,除非你非常努力地做错了一切(例如没有索引,在表达式上进行选择)。 - David-W-Fenton
@Tony Toews - 我确定有限制。有没有可能你能详细说明一下? - JeffO
显示剩余3条评论

-1

DAO被用于从任何COM应用程序访问MDB数据库。我认为它甚至无法连接到SQL Server。

ADO是DAO的后继者。ADO可以连接到许多数据库,但与SQL Server特别互动良好。因此,在您的情况下,使用ADO似乎是一个明智的选择。


1
这个答案关于DAO vs. ADO的事实是错误的。ADO不是DAO的继承者,而是ODBC的继承者。微软在A2000时期推动ADO以试图取代ADO和Jet数据库引擎,但这种尝试失败了(原因非常明显——这是一个非常愚蠢的想法)。经典的ADO已经死亡,被ADO.NET所取代,尽管它与经典的ADO有着表面上的相似之处,但它是完全不同的东西。DAO是Jet/ACE数据库引擎的接口,通过它可以访问地球上几乎任何数据存储。 - David-W-Fenton
据我所知,ODBC 的继任者是 OLE DB。ADO 是对 OLE DB 的 COM 封装。搁置 Jet 引擎是一个非常好的主意:Jet 引擎虽然效率高,但回答许多查询时会出现错误。 - Andomar
但是微软已经改变了主意,并且在Access 2007中全面承诺进一步支持Jet数据库引擎。尽管Jet在.NET开发工具家族中并不适合,但对于Access来说从来都不是一个好主意。声称微软已经弃用Access中的Jet的人正在阅读适用于微软更大的开发工具家族的知识库文章,并错误地将其建议应用于Access,而在Access中,Jet/ACE绝对不是被弃用的——它正在得到增强和推广。 - David-W-Fenton
关于OLEDB和ADO,当然,但这并不改变观点。ADO根本不是DAO的继承者。你的回答是错误的,需要进行编辑或删除。 - David-W-Fenton
微软长期推广ADO,逐渐淘汰DAO,否则为什么会开发ADP呢?如果他们在2005年改变了主意,我也不知道,我的用户仍在使用Access 2003。 - Andomar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接