ExecuteScalar()
相对于ExecuteReader()
有什么优势吗?
ExecuteScalar()
相对于ExecuteReader()
有什么优势吗?
ExecuteScalar
仅返回数据集中第一行的第一个值。实际上它与ExecuteReader()
处理方式相同,打开一个DataReader
,获取值并在获取后销毁DataReader
。我也一直对这种行为感到困惑,但它有一个优点:它发生在框架内部......而你无法在速度方面与框架竞争。
Edit By rwwilden:
通过Reflector查看SqlCommand.ExecuteScalar()
可以看到以下代码行:SqlDataReader ds = this.RunExecuteReader(
CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar");
obj2 = this.CompleteExecuteScalar(ds, false);
ExecuteReader
内部发生了什么事情,另一个优点是ExecuteScalar
在未读取任何数据时返回null
。如果使用ExecuteReader
,则需要自己检查。
使用 ExecuteScalar 方法从数据库检索单个值(例如聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此方法需要更少的代码。
还有来自ExecuteReader、ExecuteNonQuery 和 ExecuteScalar 之间的区别是什么
来自MSDN上的ExecuteScalar页面:
使用ExecuteScalar方法从数据库中检索单个值(例如聚合值)。这比使用ExecuteReader方法然后使用SqlDataReader返回的数据执行生成单个值所需的操作需要更少的代码。
因此,它并不更快或更好,但用于在仅需要一个值时减少编写的代码量。
当你的查询或存储过程只返回一个值时,最好使用ExecuteScalar()方法,它会获取结果中的第一个值。因此,在这种情况下,这种方式更快速。
Execute Scalar 用于从数据库获取单个值,而 Execute Reader 用于将多个记录读取到 DataTable 中。
相比于ExecuteReader(),ExecuteScalar()将占用更少的资源,因为后者将从数据库返回多列数据。
ExecuteReader()将实例化基于流的SqlDataReader并查询来自数据源的结果。