对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1;
这些情况最好是在存储过程中自己再定义异常捕捉

解决方案 »

  1.   


    create or replace procedure EX_UPDATE
    (
       p_id VARCHAR2,
       p_name VARCHAR2
    ) is
    begin
      BEGIN
       UPDATE EX_table
       SET
         NAME=p_NAME
         WHERE ID=p_ID;
     END;
    end EX_UPDATE;这是我定义的存储过程,是不是也就是说ExecuteNonQuery 无论执行sql的insert、update、del还是存储过程的insert、update、del总会返回受影响的行数对吧
      

  2.   

    不会,你的procedure没有定义输出参数 。就像代码里面jdbc也只有execute()才会返回int,但是一般的hibernate save()都是void的 。我自己的理解你参考下
      

  3.   

    我也遇见了你这样的问题。我发现就像你说的一样。调用的存储过程好像无论存储过程执行的怎么样,返回的都是1.我的存储过程里面是有增加、修改的事物。但是我故意让存储过程执行错误,跳转到存储过程里面的exception就说明存储过程执行出现异常,但是c#得返回值还是1.我也很郁闷,无法检测到存储过程的执行是否真确。