.net调用oracle存储过程返回值时遇到的问题

来源:互联网 发布:php mongodb 关闭连接 编辑:程序博客网 时间:2024/06/06 18:05

 最近在用动软生成的oracle代码的时候遇到了返回值的问题。我们知道,oracle存储过程中要返回值不能用return,只能定义一个out类型的参数,比如:。我的oracle存储过程代码如下:

CREATE OR REPLACE PROCEDURE UP_ORACESHI_ADD (
USERNAME_in varchar2,
PASSWORD_in varchar2,
falg out NUMBER --这里是返回值
)
 IS
BEGIN
 INSERT INTO ORACESHI(
 USERNAME,PASSWORD
 ) VALUES(
 USERNAME_in ,PASSWORD_in
 );
  if SQL%ROWCOUNT>0 THEN --判断,如果sql语句受影响的行数大于0,就返回1,否则就返回0
  falg:=1;
  ELSE
  falg:=0;
  END IF;
END UP_ORACESHI_ADD;

从语句上看没什么问题呀,C#执行这个存储过程的时候报错:

PLS-00222: 在此范围中不存在名为 'UP_ORACESHI_ADD'的函数

经过检查:发现是DBUtility里的DbHelperOra类里的处理存储过程返回值的BuildIntCommand()方法有问题。大家知道ORACLE存储过程是没有返回值的,要返回只能定义一个out参数来解决。

所以BuildIntCommand()方法要这样改才行:
command.Parameters.Add(new OracleParameter("out参数",
                OracleType.Number, 4, ParameterDirection.Output,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));

同理RunProcedure()方法只能这样改:

result = Convert.ToInt32(command.Parameters["falg"].Value);

我还发现在转换字符串的时候,这里同样是object类型,要转换成int类型,是不能用(int)的,而要用Convert.ToInt32(),否则会报错。

还有一点要注意的是:在DAL的部分,用到new OracleParameter()字段的部分时不用在这里定义out参数了。

原创粉丝点击