ExecuteNonQuery不返回结果

ta-*_*run 17 c# asp.net

这是我的(粗略)代码(DAL):

int i;
// Some other declarations

SqlCommand myCmdObject = new SqlCommand("some query");

conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();
Run Code Online (Sandbox Code Playgroud)

问题是:即使我的SELECT查询中存在记录,i仍然保留值-1.

可能是什么问题呢?

Fre*_*örk 46

你执行什么样的查询?使用ExecuteNonQuery适用于UPDATE,INSERTDELETE查询.根据文件:

对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数.当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数.对于所有其他类型的语句,返回值为-1.

  • 如果我们运行将在表中插入或更新或删除记录的StoredProcedure,返回值是多少, (2认同)

小智 16

每当要执行不应返回值或记录集的SQL语句时,都应使用ExecuteNonQuery.

因此,如果要运行更新,删除或插入语句,则应使用ExecuteNonQuery.ExecuteNonQuery返回受语句影响的行数.这听起来非常好,但是无论何时使用SQL Server 2005 IDE或Visual Studio创建存储过程,它都会添加一条废弃所有内容的小行.

该行是:SET NOCOUNT ON; 此行打开SQL Server的NOCOUNT功能,"停止指示受Transact-SQL语句影响的行数的消息作为结果的一部分返回",因此它使存储过程始终返回-1从应用程序调用(在我的例子中是一个Web应用程序).

总之,从存储过程中删除该行,现在您将获得一个值,该值指示受该语句影响的行数.

编程愉快!

http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html


小智 7

您可以使用EXECUTENONQUERY()INSERT,UPDATEDELETE.

但是SELECT你必须使用EXECUTEREADER().........


Ale*_*yen 7

因为SET NOCOUNT选项设置为on.删除"SET NOCOUNT ON"行 在您的查询或存储过程中.

有关详细信息,请参阅SqlCommand.ExecuteNonQuery()在执行Insert/Update/Delete时返回-1.