如题,解决马上给分。急。

解决方案 »

  1.   

    ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete  语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,所以执行这种操作时最好用try--catch--语句来容错。
      

  2.   

    問題說的不夠明白 很難解決啊先看你存儲過程直接執行有沒有問題使用try catch來捕獲異常 常看原因
      

  3.   

    if(cmd.ExecuteNonQuery() >0)
    {
    成功
    }
    else
    {
    失败
    }-1的情况肯定是你进行数据库操作有问题啊
    2楼把详细情况都给写出来了
    如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,
      

  4.   

    如果是insert 操作
    可以在sql語句后面 加return 1
      

  5.   

    对于 UPDATE、INSERT 和 DELETE   SQL 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1
    用ExecuteScalar(),ExecuteReader看看
      

  6.   

    看看你的sql语句或存储过程是否有 set nocount on 之类不允许返回受影响行数这样的语句
      

  7.   

    --------------------
    可能就是这个原因,VS编辑存储过程自动加上SET NOCOUNT ON
      

  8.   

    把你的过程帖出来SET NOCOUNT ON确实有这个问题.看一下你的过程里有没有这个.有的话删掉.
      

  9.   

    use SQL Profiler tool to monitor the inserting,
    see is some error in the SQL statement.
      

  10.   

    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;
      

  11.   

    后面的返回值是我自己加上去的了。
    没办法,它老返回-1所以我就乱来了。
    加了一个return.
      

  12.   

    关于ExecuteNonQuery执行存储过程的返回值
    通过ExecuteNonQuery()的返回值来判断操作数据库的成功与否是可以的.但是要分情况.1.ExecuteNonQuery() 不执行存储过程.此时如果对数据库执行,插入,更新,删除操作,返回的是 受影响的行数.(及一个大于等于0的整数)2.ExecuteNonQuery 执行存储过程.[1].存储过程有返回值(传出参数)(1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).(2).把某个值赋给返回值.[2].存储过程没有返回值执行成功后.默认返回 -1.