我对
的使用感到困惑何时使用这些方法?
答案 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)
<强>的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)
答案 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#中的数据。
ExecuteNonQuery
,例如一个简单的UPDATE语句。