gpt4 book ai didi

c# - DataReader (DbCommand) 如何处理数据库通信?

转载 作者:行者123 更新时间:2023-11-30 21:50:55 33 4
gpt4 key购买 nike

在我试图理解的软件中,DataReader 类是通过 ExecuteReader() 从 IDbCommand 类型(继承的)接收的。

我对 C# 和数据库通信还很陌生,所以:DataReader 如何处理与数据库的通信?

  • 执行时是否收到查询的完整响应ExecuteReader(),然后使用 reader.Read() 在本地单步执行响应?
  • 或者每个 reader.Read() 调用是否通过网络从数据库中获取下一项?
  • 或者,我没有想到的其他事情?

最佳答案

从技术上讲,“视情况而定”,因为 DbDataReader 是一个抽象类,可以以您认为合适的任何方式实现——包括缓冲整个结果。

但实际上,界面适合零碎阅读,实现也是如此。如果我们取 SqlDataReader例如,对 .ExecuteReader() 的初始调用将开始处理命令并使服务器提供结果,然后对 .Read() 的每次调用都会通过网络获取一行。但是,并非每次调用 .Read() 都必然涉及网络流量,因为多个行可能捆绑在一个数据包中,因此可以从缓冲区中满足读取。

这同样适用于列,甚至 - 它们可能跨越网络数据包甚至包含流,因此所有 .GetX() 方法都可能涉及额外的网络往返(这就是为什么所有这些在 .NET 4.5 及更高版本中也有 Async 版本。

关于c# - DataReader (DbCommand) 如何处理数据库通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36033236/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com