【发布时间】:2018-11-02 09:36:37
【问题描述】:
我注意到很多人不了解如何执行查询以从数据库中检索数据。
通常有如下代码:
var reader = await sqlCommand.ExecuteReaderAsync();
dataTable.Load(reader);
* 上有几个答案,将其显示为将数据异步下载到DataTable。
不过,我相信ExecuteReader 方法不会加载数据,而只会创建读取器的实例。
我可以通过官方documentation 的引用来确认这一点:
DataReader 提供无缓冲的数据流,允许 有效处理来自数据源的结果的过程逻辑 依次。检索时,DataReader 是一个不错的选择 大量数据,因为数据没有缓存在内存中。
与我发生争执的一个人引用了link 并声称数据下载正在那里进行。但是我没有在这段代码中看到对 Read 方法的调用!同时,下面的ExecuteScalarAsync方法也有这样的调用。
因此数据将使用DataTable.Load 方法加载或使用while(reader.Read()) 循环完成。我说的对吗?
那么数据加载在哪里:ExecuteReader(Async) 方法还是Read/Load 方法?
【问题讨论】:
-
是的,我知道我的问题的正确答案。但我希望得到社区的确认,以便稍后在类似的争议中引用它。
-
SO 并不是真正解决与同事纠纷的地方;尤其是当答案很明显并且可以通过几行代码轻松验证时。来自文档: ExecuteReaderAsync() ExecuteReader() 的异步版本,它将 CommandText 发送到 Connection 并构建 SqlDataReader。你是对的。
-
ReadAsync() :Read() 的异步版本,它将读取器推进到结果集中的下一条记录。 T
-
如果您想要一个可靠的答案,可能有必要提供赏金(一旦该选项可用)。必须做同样的事情才能在这里得到我的问题的可靠答案:*.com/questions/49899012/…
-
@MitchWheat - 完全同意。但是 SO 有不正确的答案(接受和赞成),我无法说服作者修复它们。
标签: c# sql .net database ado.net