use SQL Profiler tool to monitor the inserting, see is some error in the SQL statement.
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;
{
成功
}
else
{
失败
}-1的情况肯定是你进行数据库操作有问题啊
2楼把详细情况都给写出来了
如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,
可以在sql語句后面 加return 1
用ExecuteScalar(),ExecuteReader看看
可能就是这个原因,VS编辑存储过程自动加上SET NOCOUNT ON
see is some error in the SQL statement.
$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;
没办法,它老返回-1所以我就乱来了。
加了一个return.
通过ExecuteNonQuery()的返回值来判断操作数据库的成功与否是可以的.但是要分情况.1.ExecuteNonQuery() 不执行存储过程.此时如果对数据库执行,插入,更新,删除操作,返回的是 受影响的行数.(及一个大于等于0的整数)2.ExecuteNonQuery 执行存储过程.[1].存储过程有返回值(传出参数)(1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).(2).把某个值赋给返回值.[2].存储过程没有返回值执行成功后.默认返回 -1.