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

iTa*_*ayb 19 c#

是否ExecuteScalar()有任何优势了ExecuteReader()

Bob*_*bby 28

ExecuteScalar仅返回数据集第一行的第一个值.内部它被处理就像ExecuteReader(),a DataReader被打开,价值被挑选然后DataReader被摧毁.我也总是想知道这种行为,但它有一个优点:它发生在框架内......你不能以速度的方式与框架竞争.

编辑rwwilden: 看看里面的Reflector SqlCommand.ExecuteScalar()你可以看到这些线:

SqlDataReader ds = this.RunExecuteReader(
    CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar");
obj2 = this.CompleteExecuteScalar(ds, false);
Run Code Online (Sandbox Code Playgroud)

究竟里面发生了什么ExecuteReader.另一个优点是在没有数据读取时ExecuteScalar返回null.如果你使用ExecuteReader,你必须自己检查.


Adr*_*der 14

来自SqlCommand.ExecuteScalar方法

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

另外,ExecuteReader,ExecuteNonQuery和ExecuteScalar之间有什么区别

  • ExecuteReader:用于访问数据.它提供仅向前,只读,连接的记录集.
  • ExecuteNonQuery:用于数据操作,例如Insert,Update,Delete.
  • ExecuteScalar:用于检索1行1列.value.,即单值.例如:用于恢复聚合功能.它比从DB中获取单个值的其他方式更快.