ExecuteScalar,ExecuteReader和ExecuteNonQuery有什么区别?

时间:2010-06-04 12:39:22

标签: asp.net ado.net

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

9 个答案:

答案 0 :(得分:178)

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

答案 1 :(得分:38)

<强>的ExecuteNonQuery():

  1. 仅适用于Action Queries(创建,更改,删除,插入,更新,删除)。
  2. 返回由Query影响的行数。
  3. 返回类型为int
  4. 返回值是可选的,可以分配给整数变量。
  5. <强>的ExecuteReader():

    1. 将使用操作和非操作查询(选择)
    2. 返回Query选择的行集合。
    3. 返回类型为DataReader。
    4. 返回值是强制性的,应分配给另一个对象DataReader。
    5. <强>的ExecuteScalar():

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

        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();

有关详情,请点击此处 http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery