ExecuteScalar,ExecuteReader和ExecuteNonQuery有什么区别?
我们使用这三种不同的情况是什么? 我应该在哪里使用,哪里不应该?
- 通常在查询返回单个值时使用
ExecuteScalar
。 如果它返回更多,那么结果是第一行的第一列。 一个例子可能是SELECT @@IDENTITY AS 'Identity'
。 -
ExecuteReader
用于具有多行/列的任何结果集(例如,SELECT col1, col2 from sometable
)。 -
ExecuteNonQuery
通常用于没有结果的SQL语句(例如UPDATE,INSERT等)。
的ExecuteNonQuery():
- 将只使用动作查询(创build,更改,删除,插入,更新,删除)。
- 返回查询影响的行数。
- 返回types是int
- 返回值是可选的,可以分配给一个整型variables。
的ExecuteReader():
- 将与“操作和非操作查询”(Select)
- 返回查询所选行的集合。
- 返回types是DataReader。
- 返回值是强制性的,应该被分配给另一个对象DataReader。
的ExecuteScalar():
- 将与包含集合函数的非操作查询一起工作。
- 返回查询结果的第一行和第一列值。
- 返回types是对象。
- 返回值是强制性的,应该分配给所需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