使用这三种情况时有哪些不同的情况?我应该在哪里使用,哪个不应该?
答案 0 :(得分:178)
ExecuteScalar
通常在查询返回单个值时使用。如果它返回更多,则结果是第一行的第一列。示例可能是SELECT @@IDENTITY AS 'Identity'
。ExecuteReader
用于包含多行/列的任何结果集(例如SELECT col1, col2 from sometable
)。ExecuteNonQuery
通常用于没有结果的SQL语句(例如,UPDATE,INSERT等)。答案 1 :(得分:38)
<强>的ExecuteNonQuery():强>
<强>的ExecuteReader():强>
<强>的ExecuteScalar():强>
参考网址
http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html
答案 2 :(得分: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'
答案 3 :(得分:9)
来自文档(注意:当你想知道做什么时,MSDN是一个方便的资源!):
<强> ExecuteScalar 强>
使用ExecuteScalar方法从数据库中检索单个值(例如,聚合值)。这比使用ExecuteReader方法需要的代码少,然后使用SqlDataReader返回的数据执行生成单个值所需的操作。
<强> ExecuteReader 强>
将CommandText发送到Connection并构建一个SqlDataReader。
......来自SqlDataReader ...
提供从SQL Server数据库中读取仅向前行的方法。这个类不能被继承。
<强> ExecuteNonQuery 强>
您可以使用ExecuteNonQuery执行目录操作(例如,查询数据库的结构或创建数据库对象,例如表),或者通过执行UPDATE,INSERT或更改数据库而不使用DataSet来更改数据DELETE语句。
答案 4 :(得分:8)
添加其他人发布的内容:
ExecuteScalar从概念上返回查询结果集第一行中最左边的列;您可以将ExecuteScalar作为SELECT * FROM人员,但您只能得到结果行的第一个单元格 通常用于返回单个值的查询。我不是100%肯定SQLServer,但是在Oracle中,你不会使用它来运行FUNCTION(一个返回单个值的数据库代码)并期望它为你提供函数的返回值即使函数返回单个值。但是,如果您将该函数作为查询的一部分运行,例如SELECT SUBSTR('abc',1,1)FROM DUAL然后它会返回值,因为返回值存储在结果行集的最左边单元格中
ExecuteNonQuery将用于运行修改数据(INSERT / UPDATE / DELETE)或修改数据库结构(CREATE TABLE ...)的数据库存储过程,函数和查询。通常,调用的返回值表示操作影响了多少行,但检查数据库文档以保证此
答案 5 :(得分:4)
ExecuteReader()
执行一个SQL查询,该查询返回数据提供程序DBDataReader对象,该对象仅提供对于查询结果的仅转发和只读访问。
ExecuteScalar()
类似于专为单例查询设计的ExecuteReader()
方法,例如获取记录计数。
ExecuteNonQuery()
执行适用于创建,删除,更新,插入的非查询
答案 6 :(得分:3)
<强>的ExecuteNonQuery 强>
此ExecuteNonQuery方法仅用于insert,update和delete,Create和SET语句。 ExecuteNonQuery方法将返回使用INSERT,DELETE或UPDATE操作影响的行数。
<强>的ExecuteScalar 强>
从数据库中检索单个值非常快。 执行标量将在使用命令对象执行SQL查询或存储过程时返回单行单列值,即单值。 的的ExecuteReader 强>
使用命令对象执行SQL查询或存储过程时,将使用Execute Reader返回行集。这个是仅向前检索记录,它用于从头到尾读取表值。
答案 7 :(得分:3)
ExecuteNonQuery方法将返回使用INSERT,DELETE或UPDATE操作影响的行数。此ExecuteNonQuery方法仅用于insert,update和delete,Create和SET语句。 (Read More)
使用命令对象执行SQL查询或存储过程时,ExecuteScalar将返回单行单列值,即单值。从数据库中检索单个值非常快。 (Read More)
在使用命令对象执行SQL查询或存储过程时,将使用ExecuteReader返回行集。这个是仅向前检索记录,它用于从头到尾读取表值。 (Read More)
答案 8 :(得分:1)
ExecuteNonQuery:通常在Sql语句(如插入,更新,删除操作)没有返回任何内容时使用。
cmd.ExcecuteNonQuery();
<强>的ExecuteScalar:强>
当Sql查询返回单个值时将使用它。
Int b = cmd.ExcecuteScalar();
<强>的ExecuteReader 强>
当Sql查询或存储过程返回多行/列
时将使用它SqlDataReader dr = cmd.ExecuteReader();