下面这个是我的存储过程:
create or replace procedure aj_songdahuizheng_insert(--创建(修改)存储过程
s_xtajbh nvarchar2,--输入变量
s_ssdr nvarchar2,
s_wsmcjs nvarchar2,
s_sddd nvarchar2,
s_ssdrqm nvarchar2,
s_sdrq nvarchar2,
s_sdr nvarchar2,
s_bz nvarchar2,
s_zltz number,
s_sxgz number,
s_tzgz number,
s_cljd number,
o_res  out number--输出变量,这里的out参数在存储过程中必须给他赋值,否则存储过程编译出错。
)isbegin
--添加
insert into aj_songdahuizheng values(s_xtajbh,s_ssdr,s_wsmcjs,s_sddd,s_ssdrqm,s_sdrq,s_sdr,s_bz,s_zltz,s_sxgz,s_tzgz,s_cljd);
o_res := 1;--给输出参数赋值,增加返回值(此操作必须在过程中执行)
COMMIT;--增加事务控制
EXCEPTION
   WHEN OTHERS  THEN
   ROLLBACK;
   o_res := 0;
end aj_songdahuizheng_insert;
已经测试了,没有错。
再下面是我的dal层中的一个添加的方法的(访问存储过程的)
public static int Add(ZFJC.Model.AJ_SONGDAHUIZHENG model)
        {            OracleParameter[] dpara = new OracleParameter[] {
                new OracleParameter("s_xtajbh",model.Xtajbh),
                new OracleParameter("s_ssdr",model.Ssdr),
                new OracleParameter("s_wsmcjs",model.Wsmcjs),
                new OracleParameter("s_sddd",model.Sddd),
                new OracleParameter("s_ssdrqm",model.Ssdrqm),
                new OracleParameter("s_sdrq",model.Sdrq),
                new OracleParameter("s_sdr",model.Sdr),
                new OracleParameter("s_bz",model.Bz),
                new OracleParameter("s_zltz",model.Zltz),
                new OracleParameter("s_sxgz",model.Sxgz),
                new OracleParameter("s_tzgz",model.Tzgz),
                new OracleParameter("s_cljd",model.Cljd)
                //这里是不是少了一个输出参数啊?
            };
           
            return DbHelperOra.RunProcedure("aj_songdahuizheng_insert", dpara);        }
出现的错误是:参数类型或个数不对
我总是感觉我的这个方法不正规,有没有类似的,而又比我的好的。给我一个

解决方案 »

  1.   

    是不是那个out那里也有给个参数
      

  2.   

    OracleParameter par = new OracleParameter("@o_res");
    par.Direction  =ParameterDirection.Output;
      

  3.   

     OracleParameter[] dpara = new OracleParameter[] {
                    new OracleParameter("s_xtajbh",model.Xtajbh),
                    new OracleParameter("s_ssdr",model.Ssdr),
                    new OracleParameter("s_wsmcjs",model.Wsmcjs),
                    new OracleParameter("s_sddd",model.Sddd),
                    new OracleParameter("s_ssdrqm",model.Ssdrqm),
                    new OracleParameter("s_sdrq",model.Sdrq),
                    new OracleParameter("s_sdr",model.Sdr),
                    new OracleParameter("s_bz",model.Bz),
                    new OracleParameter("s_zltz",model.Zltz),
                    new OracleParameter("s_sxgz",model.Sxgz),
                    new OracleParameter("s_tzgz",model.Tzgz),
                    new OracleParameter("s_cljd",model.Cljd)
                    new OracleParameter("o_res",model.Cljd)
                };
                dpara[12].Direction = ParameterDirection.Output;
      

  4.   

    哦,后面的model没改过来,注意自己改一下。
      

  5.   

    OracleParameter par = new OracleParameter("@o_res", OracleType.Int32);
    par.Direction = ParameterDirection.Output;都差不多ParameterDirection.Output这句别忘了
      

  6.   

    opr[12] = new OracleParameter("i_备注", OracleType.VarChar); 
                opr[12].Direction = ParameterDirection.Output;
                opr[12].Value = BZ;
                
      

  7.   

    用Dictionary将参数传进去,然后遍历生成OracleParameter
    输出参数还需要设置param.Direction = ParameterDirection.Output;
      

  8.   

    我已经按照上面的改了
    现在还是有错
    ORA-06550: 第 1 行, 第 23 列: 
    PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored

    怎么回事啊?
      

  9.   

    PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
    可能存储过程名太长了,改短点试试?
      

  10.   

    我已经按照上面的改了
    现在还是有错
    ORA-06550: 第 1 行, 第 23 列: 
    PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    怎么回事啊?
      

  11.   

    推荐用 CYQ.Data 数据框架,操作Oracle不需要这么多代码。
      

  12.   

    我已经按照上面的改了
    现在还是有错
    ORA-06550: 第 1 行, 第 23 列: 
    PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    怎么回事啊?