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

最佳答案

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

09-12 05:00