asp.net ExecuteNonQuery不返回结果

mkshixfv  于 2022-11-19  发布在  .NET
关注(0)|答案(9)|浏览(209)

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

int i;
// Some other declarations

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

conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();

问题是:即使SELECT查询中存在一条记录,i中的值仍为-1
有什么问题吗?

uklbhaso

uklbhaso1#

您要执行哪种查询?使用ExecuteNonQuery是为了UPDATEINSERTDELETE查询。根据the documentation
对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当触发器存在于要插入或更新的表中时,返回值包括受插入或更新操作影响的行数以及受触发器影响的行数。对于所有其他类型的语句,返回值为-1。

hpcdzsge

hpcdzsge2#

每当您要执行不应返回值或记录集的SQL语句时,都应使用ExecuteNonQuery。
因此,如果您要运行更新、删除或插入语句,则应使用ExecuteNonQuery。ExecuteNonQuery返回受语句影响的行数。这听起来很不错,但每当您使用SQL Server 2005 IDE或Visual Studio创建存储过程时,它都会添加一行小字,从而破坏一切。
那行字是:设置NOCOUNT ON;这一行打开了SQL Server的NOCOUNT功能,该功能“阻止将指示受Transact-SQL语句影响的行数的消息作为结果的一部分返回”,因此它使存储过程在从应用程序(在我的示例中是Web应用程序)调用时总是返回-1。
最后,从存储过程中删除该行,您现在将获得一个值,该值指示受语句影响的行数。
快乐编程!
http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html

vjrehmav

vjrehmav3#

您可以将EXECUTENONQUERY()用于INSERTUPDATEDELETE
但是对于SELECT,您必须使用EXECUTEREADER() .........

idv4meu8

idv4meu84#

因为SET NOCOUNT选项设置为ON.删除行“SET NOCOUNT ON;“的名称。
如欲了解更多信息,请访问 * SqlCommand.ExecuteNonQuery() returns -1 when doing Insert / Update / Delete *。

7z5jn7bk

7z5jn7bk5#

ExecuteNonQuery方法返回的是@@ROWCOUNT SQL Server变量,而ExecuteNonQuery方法返回的是最后一个查询执行后的结果。

yuvru6vn

yuvru6vn6#

ExecuteNonQuery方法用于不是查询的SQL语句,例如INSERTUPDATE ......如果希望语句返回结果(即查询),则需要使用ExecuteScalarExecuteReader

lsmepo6l

lsmepo6l7#

来自MSDN:SqlCommand.ExecuteNonQuery Method
您可以使用ExecuteNonQuery来执行目录作业(例如,查询数据库的结构或建立数据库对象(例如数据表)),或借由执行UPDATE、INSERT或DELETE陈述式,在不使用DataSet的情况下变更数据库中的数据。
虽然ExecuteNonQuery不会传回任何数据列,但Map至参数的任何输出参数或传回值都会填入数据。
对于UPDATE、INSERT和DELETE语句,返回值是受该命令影响的行数。当触发器存在于要插入或更新的表上时,返回值包括受插入或更新操作影响的行数以及受触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也是-1。
您使用的是SELECT查询,因此得到-1

lc8prwob

lc8prwob8#

如果只想从查询中获取单个整数,请用途:

myCmdObject.ExecuteScalar()
omjgkv6w

omjgkv6w9#

如果你想运行一个更新、删除或插入语句,你应该使用ExecuteNonQuery。2 ExecuteNonQuery返回受语句影响的行数。
How to Set Count On

相关问题