我在使用ExecuteNonQuery()方法在C#中执行Select命令时遇到问题;它总是返回-1;这意味着所选语句没有返回任何记录,不是吗?
但是当我打开sql managment studio并运行相同的select语句时;我发现它返回了行。
请帮助我!
答案 0 :(得分:7)
您不应该执行SELECT with an ExecuteNonQuery()
。它被称为ExecuteNonQuery,因为您希望执行不是查询的内容。 SELECT
是一个查询。你想要ExecuteReader。如果您想要UPDATE
或DELETE
,那么您可以执行ExecuteNonQuery()
,这将显示受影响的行数。
答案 1 :(得分:6)
不,这表示影响没有行。
来自SqlCommand.ExecuteNonQuery
的文件(强调我的):
对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。 对于所有其他类型的语句,返回值为-1 。如果发生回滚,则返回值也为-1。
也许您正在寻找ExecuteScalar
?这对于 - 比如说 - 获取计数是合适的。它从查询中返回单个值。否则(如果您想要实际结果),请使用ExecuteReader
获取“正常”结果。
SELECT语句是SQL中的一个查询,所以你真的不清楚为什么要尝试用ExecuteNonQuery
执行一个。
答案 2 :(得分:1)
使用ExecuteReader()
或SqlDataAdapter()
获取行。
答案 3 :(得分:1)
ExecuteNonQuery()
之类的非查询操作时,会使用 insert, update or delete
,它不能用于select
之类的查询操作。要从DB
获取记录,请使用SqlDataReader
或SqlDataAdapter
,但SqlDataReader
可提供更好的效果。请查看此链接,说明SqlDataReader。