使用 SqlDataAdapter 或 SqlDataReader,哪一个更高效并且对服务器的负载最小?

Posted

技术标签:

【中文标题】使用 SqlDataAdapter 或 SqlDataReader,哪一个更高效并且对服务器的负载最小?【英文标题】:Using SqlDataAdapter or SqlDataReader, which one is more efficient and puts minimum load on server? 【发布时间】:2013-11-05 16:16:27 【问题描述】:

我正在编写一个 ASP.net C# 程序,其中我必须多次访问 SQL 数据库并多次检索小数据。请建议哪种方式更有效?我应该使用SqlDataAdapter 并将整个数据存储在DataTable 并在需要时检索或使用SQLDataReader,如果有的话,请建议任何其他有效的方法。谢谢!! :)

【问题讨论】:

我的猜测是延迟加载,但答案会根据您的有效负载和用例而有所不同。 为什么需要“多次加载小数据”?您不能一步缓存该数据或加载更多数据吗?听起来好像您还应该将业务逻辑交换到数据库中,而不是使用循环。 @Tim Schmelter:我必须从父表中选择一个实体并处理它的子表。我没有看到任何其他方法,因为我的知识可能有限,如果你能建议我更好的方法那么请做! @loveComputerscience:很难展示更好的方法,因为我们不知道您实际上想要实现什么。但是你应该通过JOIN链接父表和子表。 【参考方案1】:

听起来都不是很好。获取所有数据并挑选您需要的东西在双方(服务器和客户端)听起来效率低下,同时发送大量微小的 sql 请求也听起来效率低下。

理想情况下,您可以通过尽可能少的请求获得所需的所有数据(但仅此而已)。在SqlDataAdapterSQlDataReader 之间进行选择并不能解决您的问题。您需要查看您的设计并确定是否可以在不保留整个数据库的内存副本的情况下获取页面的所有相关数据。

顺便说一句,SqlDataAdapter 在内部使用 SqlDataReader 来获取其数据。

【讨论】:

以上是关于使用 SqlDataAdapter 或 SqlDataReader,哪一个更高效并且对服务器的负载最小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 where 子句上基于 SqlCommand 或 SqlDataAdapter 填充 datagridview? SqlDataAdapter 不适用于哪里?

使用 SqlDataAdapter 或 SqlDataReader,哪一个更高效并且对服务器的负载最小?

使用“SQlDataAdapter”时的最佳实践

成功插入期间 SqlDataAdapter 未触发 RowUpdated 或 RowUpdating

如何在 SQLDataAdapter 中使用更新语句

SqlDataAdapter 句柄错误 - 未创建对象