何时使用ExecuteScalar,ExecuteReader,ExecuteNonQuery?

时间:2014-01-11 05:44:31

标签: c# vb.net

我对

的使用感到困惑
  1. 列表项
  2. 的ExecuteScalar,
  3. 的ExecuteReader,
  4. 的ExecuteNonQuery
  5. 何时使用这些方法?

5 个答案:

答案 0 :(得分:55)

ExecuteScalar()仅返回查询第一行第一列的值。
ExecuteReader()返回一个对象,该对象可以迭代整个结果集,同时只在内存中保留一条记录。
ExecuteNonQuery()根本不返回数据:仅受插入,更新或删除影响的行数。

此外,您还可以查看 DbDataAdapter 类型,其中包含 Fill()方法,该方法允许您将整个结果集下载到 DataTable DataSet 对象,以及其他一些功能。

最后,这似乎是您熟悉MSDN的好时机。这就是为什么做文档:你有方法名称。去看看吧。

答案 1 :(得分:41)

ExecuteScalar :对于单值

 Int32 Value = Convert.ToInt32(ExecuteScalar("SELECT SUM(COLUMNNAME) FROM TABLE")); 
 Int32 Value = Convert.ToInt32(ExecuteScalar("SELECT AVG(COLUMNNAME) FROM TABLE")); 

ExecuteReader :以正向模式读取行

 IdataReader dr = ExecuteReader("SELECT * FROM TABLE"); 
 while(dr.Read())
 {
     //You will get rows values like this dr["ColumnName"]
 } 

ExecuteNonQuery :用于插入/删除/更新行到表

ExecuteNonQuery("DELETE FROM TABLE");
ExecuteNonQuery("UPDATE TABLE SET COLUMNNAME = 'A'");

答案 2 :(得分:9)

What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar

<强>的ExecuteNonQuery

  

ExecuteNonQuery方法将返回受影响的行数   INSERT,DELETE或UPDATE操作。这个ExecuteNonQuery方法会   仅用于插入,更新和删除,创建和SET   声明。 (Read More about ExecuteNonQuery)

SqlCommand.ExecuteNonQuery MSDN Documentation

<强>的ExecuteReader

  

Execute Reader将用于在执行时返回行集   使用命令对象的SQL查询或存储过程。这个是   仅转发记录的检索,并用于读取表格   从头到尾的值。(Read More about ExecuteReader)

SqlCommand.ExecuteReader MSDN Documentation

执行标量

  

Execute Scalar将返回单行单列值,即单行   使用命令执行SQL查询或存储过程时的值   宾语。从数据库中检索单个值非常快。 (Read More about Execute Scalar

SqlCommand.ExecuteScalar MSDN Documentation

答案 3 :(得分:5)

当您的查询返回单个值时,请使用ExecuteScalar。如果它返回更多结果,则最终结果是第一行的第一列。一个例子可能是SELECT Count(*) from MyTable

使用ExecuteReader获取包含多行/列的结果集(例如SELECT col1, col2 from MyTable

对于不会从数据库检索结果但在现有数据库中进行更新的SQL语句使用ExecuteNonQuery。(例如UPDATE, INSERT,等。)

答案 4 :(得分:3)

基本上这是简化的,但您可以查找每个SQL术语或.net对象,或者阅读MSDN上的ADO.net以获取更多信息。

当你调用只返回一个数字的SQL标量函数时,

ExecuteScalar

ExecuteReader当你进行SQL调用时会从表中返回一个记录集,它会为你提供一个SqlDataReader对象来检索C#中的数据。

当没有从SQL服务器预期的任何类型的返回值时使用

ExecuteNonQuery,例如一个简单的UPDATE语句。