ExecuteScalar,ExecuteReader和ExecuteNonQuery有什么区别?

我们使用这三种不同的情况是什么? 我应该在哪里使用,哪里不应该?

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

的ExecuteNonQuery():

  1. 将只使用动作查询(创build,更改,删除,插入,更新,删除)。
  2. 返回查询影响的行数。
  3. 返回types是int
  4. 返回值是可选的,可以分配给一个整型variables。

的ExecuteReader():

  1. 将与“操作和非操作查询”(Select)
  2. 返回查询所选行的集合。
  3. 返回types是DataReader。
  4. 返回值是强制性的,应该被分配给另一个对象DataReader。

的ExecuteScalar():

  1. 将与包含集合函数的非操作查询一起工作。
  2. 返回查询结果的第一行和第一列值。
  3. 返回types是对象。
  4. 返回值是强制性的,应该分配给所需types的variables。

参考url:

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

每一个都是不同的types执行。

  • ExecuteScalar将是将返回一个单一的值的查询types。

    一个例子是插入后返回一个生成的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,但实际上是执行某种forms的工作,如插入删除或修改某些内容。

    一个例子是更新数据库中的用户configuration文件。

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

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

的ExecuteScalar

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

的ExecuteReader

将CommandText发送到Connection并构build一个SqlDataReader。

…从SqlDataReader …

提供了从SQL Server数据库中读取只向前行的stream的方法。 这个类不能被inheritance。

的ExecuteNonQuery

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

添加到其他人发布的内容:

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

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

ExecuteReader()执行一个SQL查询,该查询返回仅提供转发的数据提供程序DBDataReader对象和查询结果的只读访问。

ExecuteScalar()类似于为单例查询devise的ExecuteReader()方法,例如获取logging计数。

ExecuteNonQuery()执行与创build,删除,更新,插入一起工作的非查询)

的ExecuteNonQuery

此ExecuteNonQuery方法将仅用于插入,更新和删除,创build和SET语句。 ExecuteNonQuery方法将返回使用INSERT,DELETE或UPDATE操作执行的行数。

的ExecuteScalar

从数据库中检索单个值是非常快的。 执行标量将使用命令对象返回单行单列值,即单个值,执行SQL查询或存储过程。 的ExecuteReader

Execute Reader将用于返回行集合,执行SQL查询或存储过程时使用命令对象。 这是只转发logging的检索,它用于从第一个到最后一个读取表值。

ExecuteNonQuery方法将返回使用INSERT,DELETE或UPDATE操作执行的行数。 此ExecuteNonQuery方法将仅用于插入,更新和删除,创build和SET语句。 (阅读更多)

ExecuteScalar将使用命令对象返回单行单列值,即单个值,执行SQL查询或存储过程。 从数据库中检索单个值是非常快的。 (阅读更多)

ExecuteReader将用于返回一组行,使用命令对象执行SQL查询或存储过程。 这是只转发logging的检索,它用于从第一个到最后一个读取表值。 (阅读更多)

ExecuteNonQuery:通常用于从插入,更新,删除操作等Sql语句没有返回。

 cmd.ExcecuteNonQuery(); 

的ExecuteScalar:

当Sql查询返回单个值时将使用它。

 Int b = cmd.ExcecuteScalar(); 

的ExecuteReader

当Sql查询或存储过程返回多个行/列时,将使用它

 SqlDataReader dr = cmd.ExecuteReader(); 

欲了解更多信息,您可以点击这里http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery