ExecuteScalar,ExecuteReader和ExecuteNonQuery有什么区别?

nec*_*tar 99 asp.net ado.net

当我们使用这三种时,有哪些不同的情况?我应该在哪里使用,哪个不应该?

Mar*_*ins 179

  • ExecuteScalar通常在查询返回单个值时使用.如果它返回更多,则结果是第一行的第一列.一个例子可能是SELECT @@IDENTITY AS 'Identity'.
  • ExecuteReader用于具有多行/列的任何结果集(例如,SELECT col1, col2 from sometable).
  • ExecuteNonQuery 通常用于没有结果的SQL语句(例如,UPDATE,INSERT等).

  • `ExecuteNonQuery`可以返回受影响的行数. (37认同)
  • 如果存储过程中有 return 语句,则 ExecuteNonQuery 也可以工作。http://stackoverflow.com/questions/6210027/calling-stored-procedure-with-return-value (2认同)

小智 39

的ExecuteNonQuery():

  1. 将仅与Action Queries一起使用(Create,Alter,Drop,Insert,Update,Delete).
  2. 返回Query影响的行数.
  3. 返回类型是int
  4. 返回值是可选的,可以分配给整数变量.

的ExecuteReader():

  1. 将使用操作和非操作查询(选择)
  2. 返回Query选择的行集合.
  3. 返回类型是DataReader.
  4. 返回值是必需的,应该分配给另一个对象DataReader.

的ExecuteScalar():

  1. 将使用包含聚合函数的非操作查询.
  2. 返回查询结果的第一行和第一列值.
  3. 返回类型是对象.
  4. 返回值是强制性的,应分配给所需类型的变量.

参考网址:

http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html


Bre*_*ick 37

每一个都是不同类型的执行.

  • ExecuteScalar将是返回单个值的查询类型.

    一个例子是在插入后返回生成的id.

    INSERT INTO my_profile (Address) VALUES ('123 Fake St.'); SELECT CAST(scope_identity() AS int)

  • ExecuteReader为您提供了一个数据读取器,允许您一次读取行的所有列.

    一个例子是为一个或多个用户提取简档信息.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery是任何不返回值的SQL,但实际上是执行某种形式的工作,如插入删除或修改某些内容.

    一个例子是更新数据库中的用户配置文件.

    UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'


Gre*_*ech 9

从文档(注意:当你想知道什么做的时候,MSDN是一个方便的资源!):

的ExecuteScalar

使用ExecuteScalar方法从数据库中检索单个值(例如,聚合值).这比使用ExecuteReader方法所需的代码少,然后使用SqlDataReader返回的数据执行生成单个值所需的操作.

的ExecuteReader

将CommandText发送到Connection并构建SqlDataReader.

...并从SqlDataReader ...

提供从SQL Server数据库中读取仅向前行的流的方法.这个类不能被继承.

的ExecuteNonQuery

您可以使用ExecuteNonQuery执行目录操作(例如,查询数据库的结构或创建数据库对象,例如表),或者通过执行UPDATE,INSERT或DELETE语句来更改数据库中的数据而不使用DataSet.


Mat*_*att 8

添加其他人发布的内容:

ExecuteScalar从概念上返回查询结果集第一行中最左边的列; 您可以将ExecuteScalar作为SELECT*FROM人员,但您只能得到结果行的第一个单元格通常用于返回单个值的查询.我不是100%肯定SQLServer,但在Oracle中,你不会用它来运行FUNCTION(一个返回单个值的数据库代码)并期望它为你提供函数的返回值,即使函数返回单个值.但是,如果您将该函数作为查询的一部分运行,例如SELECT SUBSTR('abc',1,1)FROM DUAL,那么它将根据返回值存储在最左上方的事实给出返回值生成的行集的单元格

ExecuteNonQuery将用于运行修改数据(INSERT/UPDATE/DELETE)或修改数据库结构(CREATE TABLE ...)的数据库存储过程,函数和查询.通常,调用的返回值表示操作影响了多少行,但检查数据库文档以保证这一点