ExecuteScalar()是否比ExecuteReader()有任何优势?

时间:2010-03-08 08:15:18

标签: c#

ExecuteScalar()优于ExecuteReader()吗?

6 个答案:

答案 0 :(得分:28)

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,则必须自行检查。

答案 1 :(得分:14)

来自SqlCommand.ExecuteScalar Method

  

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

同样来自What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar

  • ExecuteReader :用于访问 数据。它提供了一个前锋, 只读,连接记录集。
  • ExecuteNonQuery :用于数据 操作,例如插入,更新, 删除。
  • ExecuteScalar :用于审核1 第1行。值。,即单值。 例如:用于恢复聚合功能。 它比其他方式更快 从DB中获取单个值。

答案 2 :(得分:4)

来自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

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

答案 3 :(得分:2)

当您从Query或SP返回单个值时,最好使用ExecuteScalar(),因为它会检索结果的第一个值。因此,在这种情况下,这种情况会更快。

答案 4 :(得分:2)

Execute Scalar旨在从Execute Reader中获取数据库中的单个值,以便将多条记录输入DataTable。

答案 5 :(得分:0)

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

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