Does ExecuteScalar() have any advantages over ExecuteReader()?

c#

Solution

`ExecuteScalar` only returns the first value from the first row of the dataset. Internal it is treated just like `ExecuteReader()`, a `DataReader` is opened, the value is picked and the `DataReader` gets destroyed afterwards. I also always wondered about that behavior, but it has one advantage: It takes place within the Framework...and you can't compete with the Framework in manners of speed.

Edit By rwwilden: Taking a look with Reflector inside `SqlCommand.ExecuteScalar()` you can see these lines:

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

Exactly what happens inside `ExecuteReader`. Another advantage is that `ExecuteScalar` returns `null` when no data is read. If you use `ExecuteReader`, you'd have to check this yourself.

Problem

Does `ExecuteScalar()` have any advantages over `ExecuteReader()`?

Original source