【发布时间】:2011-06-21 05:57:26
【问题描述】:
当我使用 ExecuteNonQuery() 方法在 C# 中执行 Select 命令时遇到问题;它总是返回-1;这意味着所选语句没有返回任何记录,不是吗?
但是当我打开 sql 管理工作室并运行相同的选择语句时;我发现它返回了行。
请帮帮我!
【问题讨论】:
当我使用 ExecuteNonQuery() 方法在 C# 中执行 Select 命令时遇到问题;它总是返回-1;这意味着所选语句没有返回任何记录,不是吗?
但是当我打开 sql 管理工作室并运行相同的选择语句时;我发现它返回了行。
请帮帮我!
【问题讨论】:
您不应该执行SELECT with an ExecuteNonQuery()。之所以称为 ExecuteNonQuery,是因为您想要执行的不是查询。 SELECT 是一个查询。你想要 ExecuteReader。如果您想执行UPDATE 或DELETE,则可以执行ExecuteNonQuery(),这将显示受影响的行数。
【讨论】:
不,这表明它影响没有行。
来自SqlCommand.ExecuteNonQuery 的文档(强调我的):
对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。 对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也是-1。
也许您正在寻找ExecuteScalar?这适用于 - 比如说 - 获取计数。它从查询中返回单个值。否则(如果您想要实际结果),请使用ExecuteReader 获取“正常”结果。
SELECT 语句是 SQL 中的一个查询,所以真的不清楚你为什么要尝试使用 Execute<b>Non</b>Query 执行一个查询。
【讨论】:
ExecuteNonQuery()用于insert, update or delete之类的非查询操作,不能用于select之类的查询操作。为了从DB 获取记录,请使用SqlDataReader 或SqlDataAdapter 但SqlDataReader 提供更好的性能。看看这个描述SqlDataReader的链接。
【讨论】:
使用ExecuteReader() 或SqlDataAdapter() 获取行。
【讨论】: