作为 SQL Server 的前端访问 - ADO 与 DAO?
Posted
技术标签:
【中文标题】作为 SQL Server 的前端访问 - ADO 与 DAO?【英文标题】:Access as a front-end to SQL Server - ADO vs DAO? 【发布时间】:2011-03-02 20:12:18 【问题描述】:我有一个项目将使用 Access 2003 作为前端,数据将存储在 SQL Server 中。 Access 将通过带有 SQL Server 中所有数据库逻辑(存储过程、视图)的链接表连接到 SQL Server。
鉴于此设置,在 Access 中使用 ADO 还是 DAO 会更好吗?这只是一个偏好问题,还是更适合作为前端的 Access 和作为数据存储的 SQL Server?尤其是在使用链接表时。谢谢。
【问题讨论】:
【参考方案1】:编写传递查询而不是链接表方法。性能会大大提高。编写 Access 应用程序?
创建一些本地表来存储一些查询结果。您可以根据需要动态更改直通查询以及连接到多个数据库的连接信息。
编辑:一般的共识是 ADO 用于连接到 sql server/其他源,DAO 用于仅 mdb 源。
【讨论】:
传递查询可以与链接表一起使用,它们不是互斥的。 @webworm,性能是问题而不是兼容性。最好请求尽可能有限的数据而不是整个表。 链接表和传递查询不是互斥的。在合理的情况下使用链接表,并在性能需要时使用其他技术。然后,您将获得两全其美。 SQL Server 通常也不需要本地表。 您对共识的评估是错误的。使用 ODBC 链接表时,您只能将 ADO 用于那些您无法以其他方式执行或效率不高的事情。这意味着仅偶尔使用 ADO(主要是为了获取可编辑的记录集以获取其他情况下不可编辑的记录集,例如,返回记录集的存储过程等)。 为了表达 Tony 的意思,Access/Jet/ACE 永远不会拉下整个 MDB,也不会拉下整个表除非你已经非常非常努力地做所有完全错误的事情(例如,没有索引,选择表达式)。【参考方案2】:使用带有 ODBC 链接表的 MDB。因为您使用的是 ODBC,所以您通过 Jet 进行连接,因此很明显 DAO 是数据访问的默认选择。
ADO 应仅用于那些无法以其他方式完成或性能不佳的事情。
简而言之,您可以像构建纯 Access 应用程序一样构建 SQL Server 应用程序(假设您构建一个具有 Jet/ACE 后端的应用程序以有效地检索数据,这应该是不费吹灰之力),并且只当默认的 Access 方法效率低下或没有得到您需要的结果时(例如,在记录集返回 sprocs 的情况下,可编辑的记录集)时,求助于服务器端功能或 ADO。
【讨论】:
-1 SQL Server 的 Access 前端不是 MDB 文件(它是 ADP 文件) 呃,什么?请撤消否决票,因为您完全错了。通过 ODBC 将 MDB 作为 SQL Server 的前端是 MS 推荐的配置。近五年来,MS 一直在弃用带有 SQL Server 的 ADP,转而支持 MDB。最初的问题是关于 DAO 的,这表明 ADP 首先没有被考虑,因为 DAO 在 ADP 中不起作用,因为没有涉及 Jet。 Andmar - 多年来,甚至十年来,ADP 都没有任何显着的改进。他们也有怪癖。 @David-W-Fenton:我的大脑通常会在解析“你完全错了”后从阅读模式切换到战斗模式,但我会给你怀疑的好处;) 感谢您阅读内容而不是拘泥于风格。【参考方案3】:DAO 用于从任何 COM 应用程序访问 MDB 数据库。我不相信它甚至可以连接到 SQL Server。
ADO 是 DAO 的继承者。 ADO 可以连接到许多数据库,但与 SQL Server 的交互特别好。所以在你的情况下,使用 ADO 似乎很简单。
【讨论】:
这个答案在关于 DAO 与 ADO 的事实上是错误的。 ADO 不是 DAO 的继承者,而是 ODBC 的继承者。 MS 在 A2000 时间框架内推动 ADO,以努力将 ADO 和 Jet 数据库引擎推到一边,但失败了(原因非常明显——这是一个愚蠢的想法)。经典 ADO 已死,已被 ADO.NET 取代,尽管与经典 ADO 表面上相似,但它是一种完全不同的动物。 DAO 是 Jet/ACE 数据库引擎的接口,您可以通过它访问地球上几乎任何数据存储。 @David-W-Fenton:据我所知,ODBC 的继承者是 OLE DB。 ADO 是围绕 OLE DB 的 COM 包装器。抛开 Jet 引擎是一个非常好的主意:Jet 引擎很高效,但错误地回答了许多查询 但是 MS 已经改变了主意,并从 Access 2007 开始全力投入 Jet 数据库引擎的进一步承诺。对于 Access,它从来没有是一个好主意,尽管 Jet 肯定完全不适合 .NET 开发工具系列。任何声称 MS 已弃用带有 Access 的 Jet 的人都在阅读适用于 MS 更大的开发工具系列的知识库文章,并将他们的建议错误地应用到 Access,其中 Jet/ACE 一点也不被弃用——它正在被增强和推广到很大程度。 在 OLEDB 与 ADO 上,是的,当然,但这并没有改变重点。 ADO 根本不是 DAO 的继承者。您的回答有误,需要修改或删除。 微软长期以来一直提倡逐步淘汰DAO以支持ADO;他们为什么要开发 ADP?如果他们在 2005 年改变主意,我不会知道,我的用户仍在使用 Access 2003。以上是关于作为 SQL Server 的前端访问 - ADO 与 DAO?的主要内容,如果未能解决你的问题,请参考以下文章
在不访问 SQL Server Profiler 的情况下分析 ADO.NET 语句
在 ASP.Net Core 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程