使用 SqlCommand.ExecuteNonQuery 而不是 … 的好处
a) SqlCommand.ExecuteNonQuery
用于更新、插入和删除操作。 除了使用 ExecuteNonQuery
而不是 ExecuteReader
我们自动知道不会返回任何查询结果之外,还有其他一些好处/原因吗 ExecuteNonQuery<应该使用 /code> 吗?
b) 同样,如果我们希望数据库操作返回单个值,我们应该使用 ExecuteScalar
而不是 ExecuteNonquery
,后者的结果将通过 返回Sql参数
。是否有任何特殊原因让我们更喜欢 ExecuteScalar
而不是 ExecuteNonQuery
?
谢谢
a) SqlCommand.ExecuteNonQuery
is used for update, insert and delete operations.
Besides the fact that by using ExecuteNonQuery
instead of ExecuteReader
we automatically know there won’t be any query results returned, are there some other benefits/reasons why ExecuteNonQuery
should be used?
b) Similarly, if we want a database operation to return a single value, we should use ExecuteScalar
instead of ExecuteNonquery
,where with the latter result would be returned via SqlParameter
. Is there any particular reason why we should prefer ExecuteScalar
over ExecuteNonQuery
?
thanx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于第二点...
ExecuteScalar 返回第一行的第一列:整个数据集被传递回客户端。即使数据集恰好是一行和一列,返回数据集的效率仍然低于使用输出/返回参数的效率。
这同样适用于第一点:不处理记录集效率更高。
For the 2nd point...
ExecuteScalar returns 1st column of 1st row: the entire dataset is passed back to the client. Even if the dataset is exactly one row and exactly one column, it's still less efficient to return a dataset than use an output/return parameter
The same applies to the 1st point too: more efficient to not process a recordset.
对于第一点...
您已经说过:
实际上,ExecuteNonQuery 返回受影响的行数,如果您执行查询后的逻辑取决于数据库是否已更改,那么这一点非常重要。
For the 1st point...
You have said:
Actually, ExecuteNonQuery returns the number of affected rows, which is very important if your logic after executing the query depends on whether the database has been changed or not.