执行存储过程时 cmd.ExecuteNonQuery() 返回 -1 如何解决?

mingch516548094 2009-03-12 02:32:42
如题,解决马上给分。急。
...全文
1254 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyhzmashiqing 2010-08-29
  • 打赏
  • 举报
回复
关于ExecuteNonQuery执行存储过程的返回值


通过ExecuteNonQuery()的返回值来判断操作数据库的成功与否是可以的.但是要分情况.

1.ExecuteNonQuery() 不执行存储过程.

此时如果对数据库执行,插入,更新,删除操作,返回的是 受影响的行数.(及一个大于等于0的整数)

2.ExecuteNonQuery 执行存储过程.

[1].存储过程有返回值(传出参数)

(1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).

(2).把某个值赋给返回值.

[2].存储过程没有返回值

执行成功后.默认返回 -1.
lypgod 2010-06-09
  • 打赏
  • 举报
回复
if EXISTS 的问题。
sun2345 2009-12-22
  • 打赏
  • 举报
回复
我也遇到这样的情况了,返回-1,确实执行成功
woshiyongkai 2009-11-12
  • 打赏
  • 举报
回复
我也是遇到了-1,可是对数据的操作时成功的。。。。郁闷中。。。。
jing87898797 2009-03-16
  • 打赏
  • 举报
回复
jian_xiaowei 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 elevenbus 的回复:]
看看你的sql语句或存储过程是否有 set nocount on 之类不允许返回受影响行数这样的语句
[/Quote]
--------------------
可能就是这个原因,VS编辑存储过程自动加上SET NOCOUNT ON
bbqqqbq 2009-03-13
  • 打赏
  • 举报
回复
学习了,帮顶一下,加油。。。
mingch516548094 2009-03-13
  • 打赏
  • 举报
回复
后面的返回值是我自己加上去的了。
没办法,它老返回-1所以我就乱来了。
加了一个return.
mingch516548094 2009-03-13
  • 打赏
  • 举报
回复
CREATE OR REPLACE FUNCTION "public"."jtnet_updatepwdanswer" (p_questionid integer, p_answerdescription varchar, p_userid integer) RETURNS integer AS
$body$
DECLARE
BEGIN
if EXISTS(select userid from public.t_pwdanswer where userid=$3)THEN
BEGIN
update public.t_pwdanswer set questionid=$1,answerdescription=$2 where userid=$3;
return 1;
END;
ELSE
BEGIN
insert into public.t_pwdanswer (questionid,answerdescription,userid) values($1,$2,$3);
return 1;
END;
end if;
EXCEPTION
WHEN others THEN
return -2;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
WizardWu 2009-03-13
  • 打赏
  • 举报
回复
use SQL Profiler tool to monitor the inserting,
see is some error in the SQL statement.
lovehongyun 2009-03-13
  • 打赏
  • 举报
回复
把你的过程帖出来

SET NOCOUNT ON确实有这个问题.看一下你的过程里有没有这个.有的话删掉.
lytgmy 2009-03-13
  • 打赏
  • 举报
回复
如果你的数据库执行是成功的,请问是不是调用存储过程进行操作的?如果是调用存储过程进行操作的,那你的存储过程可能是没有返回值的,是系统默认的,所以是-1!
hb0513 2009-03-12
  • 打赏
  • 举报
回复
把你的代码贴出来看看就知道了
人生就是赌 2009-03-12
  • 打赏
  • 举报
回复
看看你的sql语句或存储过程是否有 set nocount on 之类不允许返回受影响行数这样的语句
wuyq11 2009-03-12
  • 打赏
  • 举报
回复
对于 UPDATE、INSERT 和 DELETE SQL 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1
用ExecuteScalar(),ExecuteReader看看
mingch516548094 2009-03-12
  • 打赏
  • 举报
回复
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
wangrumeng 2009-03-12
  • 打赏
  • 举报
回复
确实听奇怪的
mingch516548094 2009-03-12
  • 打赏
  • 举报
回复
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
数据库执行成功啊?各位!
cyz9977 2009-03-12
  • 打赏
  • 举报
回复
如果是insert 操作
可以在sql語句后面 加return 1
pgameli 2009-03-12
  • 打赏
  • 举报
回复
if(cmd.ExecuteNonQuery() >0)
{
成功
}
else
{
失败
}

-1的情况肯定是你进行数据库操作有问题啊
2楼把详细情况都给写出来了
如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,
加载更多回复(5)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧