ExecuteScalar()
优于ExecuteReader()
吗?
答案 0 :(得分:28)
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
,则必须自行检查。
答案 1 :(得分:14)
来自SqlCommand.ExecuteScalar Method
使用ExecuteScalar方法 检索单个值(例如, 来自数据库的聚合值)。 这比使用ExecuteReader方法需要更少的代码,然后 执行你的操作 需要生成单个值 使用a返回的数据 SqlDataReader的强>
同样来自What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar
答案 2 :(得分:4)
来自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
因此,它不是更快或更好,但用于减少只需要一个值时编写的代码量。
答案 3 :(得分:2)
当您从Query或SP返回单个值时,最好使用ExecuteScalar(),因为它会检索结果的第一个值。因此,在这种情况下,这种情况会更快。
答案 4 :(得分:2)
Execute Scalar旨在从Execute Reader中获取数据库中的单个值,以便将多条记录输入DataTable。
答案 5 :(得分:0)
与ExecuteReader()相比,ExecuteScalar()将占用更少的资源,因为稍后将从数据库返回多列数据。
ExecuteReader()将实例化基于流的SqlDataReader,并从数据源查询结果