【发布时间】:2010-03-08 08:15:17
【问题描述】:
ExecuteScalar() 比 ExecuteReader() 有什么优势吗?
【问题讨论】:
-
用于检索单个值的缩放器,用于多个值的读取器。
标签: c#
ExecuteScalar() 比 ExecuteReader() 有什么优势吗?
【问题讨论】:
标签: c#
ExecuteScalar 只返回数据集第一行的第一个值。在内部,它被视为ExecuteReader(),打开DataReader,选择值,然后DataReader 被销毁。我也一直想知道这种行为,但它有一个优势:它发生在框架内......而且你无法在速度方面与框架竞争。
由 rwwilden 编辑:
看看 SqlCommand.ExecuteScalar() 内部的 Reflector,你可以看到以下几行:
SqlDataReader ds = this.RunExecuteReader(
CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar");
obj2 = this.CompleteExecuteScalar(ds, false);
ExecuteReader 内部究竟发生了什么。另一个优点是ExecuteScalar 在没有读取数据时返回null。如果您使用ExecuteReader,则必须自己检查。
【讨论】:
来自SqlCommand.ExecuteScalar Method
使用 ExecuteScalar 方法 检索单个值(例如, 一个汇总值)来自数据库。 这比使用 ExecuteReader 方法需要更少的代码,然后 执行您的操作 需要生成单个值 使用 a 返回的数据 SqlDataReader。
同样来自What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar
【讨论】:
来自 MSDN 上的ExecuteScalar 页面:
Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader
因此,它并不是更快或更好,而是用于减少只需要一个值时编写的代码量。
【讨论】:
当您从 Query 或 SP 返回单个值时,最好使用 ExecuteScalar(),因为它检索结果的第一个值。因此,在这种情况下会更快。
【讨论】:
Execute Scalar 旨在从数据库中获取单个值,而 Execute Reader 旨在将多个记录获取到 DataTable。
【讨论】:
与 ExecuteReader() 相比,ExecuteScalar() 将占用更少的资源,因为稍后将从数据库中返回多列数据。
ExecuteReader() 将实例化基于流的 SqlDataReader 并从数据源查询结果
【讨论】: