ExecuteScalar()与ExecuteReader()相比有哪些优势?

20

ExecuteScalar()相对于ExecuteReader()有什么优势吗?


2
Scaler 用于检索单个值,Reader 用于检索多个值。 - Mitch Wheat
6个回答

29
ExecuteScalar仅返回数据集中第一行的第一个值。实际上它与ExecuteReader()处理方式相同,打开一个DataReader,获取值并在获取后销毁DataReader。我也一直对这种行为感到困惑,但它有一个优点:它发生在框架内部......而你无法在速度方面与框架竞争。 Edit By rwwilden: 通过Reflector查看SqlCommand.ExecuteScalar()可以看到以下代码行:
SqlDataReader ds = this.RunExecuteReader(
    CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar");
obj2 = this.CompleteExecuteScalar(ds, false);

ExecuteReader内部发生了什么事情,另一个优点是ExecuteScalar在未读取任何数据时返回null。如果使用ExecuteReader,则需要自己检查。


15

SqlCommand.ExecuteScalar 方法

使用 ExecuteScalar 方法从数据库检索单个值(例如聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此方法需要更少的代码。

还有来自ExecuteReader、ExecuteNonQuery 和 ExecuteScalar 之间的区别是什么

  • ExecuteReader:用于访问数据。它提供一个仅向前、只读、连接的记录集。
  • ExecuteNonQuery:用于数据操纵,如插入、更新、删除。
  • ExecuteScalar:用于检索1行1列的值,即单个值。例如:用于检索聚合函数。比从数据库中检索单个值的其他方法更快。

4

来自MSDN上的ExecuteScalar页面:

使用ExecuteScalar方法从数据库中检索单个值(例如聚合值)。这比使用ExecuteReader方法然后使用SqlDataReader返回的数据执行生成单个值所需的操作需要更少的代码。

因此,它并不更快或更好,但用于在仅需要一个值时减少编写的代码量。


2

当你的查询或存储过程只返回一个值时,最好使用ExecuteScalar()方法,它会获取结果中的第一个值。因此,在这种情况下,这种方式更快速。


2

Execute Scalar 用于从数据库获取单个值,而 Execute Reader 用于将多个记录读取到 DataTable 中。


0

相比于ExecuteReader(),ExecuteScalar()将占用更少的资源,因为后者将从数据库返回多列数据。

ExecuteReader()将实例化基于流的SqlDataReader并查询来自数据源的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接