我知道 Execute Reader 和 Execute Scalar 的用途。但是 Execute Reader 可以达到 Execute Scalar 的目的。那么为什么要使用 Execute Scalar 呢?它们之间有性能差异吗?哪个更快?
谢谢。
我知道 Execute Reader 和 Execute Scalar 的用途。但是 Execute Reader 可以达到 Execute Scalar 的目的。那么为什么要使用 Execute Scalar 呢?它们之间有性能差异吗?哪个更快?
谢谢。
差异取决于IDbCommand
实现;ExecuteScalar
当内部执行相同的代码时,性能通常是相同的ExecuteReader
:很好的例子是SqlCommand:两种方法都调用内部RunExecuteReader
方法,因此性能没有任何差异。
许多流行IDbCommand
的实现与 SqlClient(MySqlConnector、NpgSql、Microsoft.Data.Sqlite)的工作方式相同,但可能会有 ADO.NET 连接器为ExecuteScalar
. 简而言之,如果您调用具体类(例如 SqlCommand),您可以使用 ExecuteReader 或 ExecuteScalar。如果您使用 IDbCommand 接口(例如,在可重用库中)并且对 ExecuteScalar 的实现用法一无所知,则在与具有特别优化实现的连接器一起使用时可能会带来一些性能优势。