【问题标题】:Does ExecuteScalar() have any advantages over ExecuteReader()?ExecuteScalar() 比 ExecuteReader() 有什么优势吗?
【发布时间】:2010-03-08 08:15:17
【问题描述】:

ExecuteScalar()ExecuteReader() 有什么优势吗?

【问题讨论】:

  • 用于检索单个值的缩放器,用于多个值的读取器。

标签: c#


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    来自SqlCommand.ExecuteScalar Method

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

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

    • ExecuteReader :用于访问 数据。它提供了一个只进, 只读的、已连接的记录集。
    • ExecuteNonQuery :用于数据 操作,例如插入、更新、 删除。
    • ExecuteScalar :用于检索 1 第 1 列value.,即单值。 例如:用于检索聚合函数。 它比其他方式更快 从 DB 中检索单个值。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 2011-02-27
              • 2019-11-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-04
              • 2017-03-25
              • 1970-01-01
              相关资源
              最近更新 更多