我用做了一个winform程序,调用adaptive server anywhere数据库的存储过程,程序能编译过去,但是执行存储过程时提示我System.Data.Odbc.OdbcException: ERROR [42000] [Sybase][ODBC Driver][Adaptive Server Anywhere]Syntax error or access violation: Wrong number of parameters to function 'Procedure_Pjlq'
   存储过程代码如下:  数据库为 sybase 的 adaptive server anywhere8.0
create PROCEDURE "DBA"."Procedure_Pjlq" (in Spjlx varchar(2),in Sqsh varchar(15),in Szzh varchar(15),in Slqr varchar(8),in Sdwbm varchar(5),out ReturnValue integer)
/* RESULT ( column_name, ... ) */
BEGIN
declare Slqrm varchar(8);
    declare Ijcs integer;
    declare Syear varchar(4);    if exists(select * from pjff_mx where pjlx = Spjlx and qsh >= Sqsh and zzh <= Sqsh) then
       set ReturnValue = 2;
       return
    end if;
    if exists(select * from pjff_mx where pjlx = Spjlx and qsh >= Szzh and zzh <= Szzh) then
       set ReturnValue = 2;
       return
    end if;
    if exists(select * from pjff_mx where pjlx = Spjlx and qsh <= Sqsh and zzh >= Szzh) then
       set ReturnValue = 2;
       return
    end if;    select operator_name into lqrm from operator_information where operator_id = Slqr ;    set Syear = convert(varchar(4),year(now(*)));
    set Ijcs = convert(integer,Szzh) - convert(integer,Sqsh) + 1;    insert into pjff_mx(pjlx,qsh,zzh,lqr,czrq,lqrm,dwbm,jcs,pjnd,ffzt,mqph)
    values(Spjlx,Sqsh,Szzh,Slqr,now(*),Slqrm,Sdwbm,Syear,Ijcs,'5',Sqsh);    commit work
    exception --异常处理
    when others then
        rollback work;
    set ReturnValue = -1;
END   OdbcCommand comm = new OdbcCommand("Procedure_Pjlq", MyModule.OdbcConn);
   comm.CommandType = CommandType.StoredProcedure;
   comm.Parameters.Add("@pjlx", OdbcType.NVarChar, 2);
   comm.Parameters["@pjlx"].Value = ls_pjlx;
   comm.Parameters["@pjlx"].Direction = ParameterDirection.Input;
   comm.Parameters.Add("@qsh", OdbcType.NVarChar, 15);
   comm.Parameters["@qsh"].Value = ls_qsh;
   comm.Parameters["@qsh"].Direction = ParameterDirection.Input;
   comm.Parameters.Add("@zzh", OdbcType.NVarChar, 15);
   comm.Parameters["@zzh"].Value = ls_zzh;
   comm.Parameters["@zzh"].Direction = ParameterDirection.Input;
   comm.Parameters.Add("@lqr", OdbcType.NVarChar, 8);
   comm.Parameters["@lqr"].Value = MyModule.Gs_czy;
   comm.Parameters["@lqr"].Direction = ParameterDirection.Input;
   comm.Parameters.Add("@dwbm", OdbcType.NVarChar, 5);
   comm.Parameters["@dwbm"].Value = MyModule.Gs_dwbm;
   comm.Parameters["@dwbm"].Direction = ParameterDirection.Input;
   comm.Parameters.Add("dwbm", OdbcType.NVarChar, 5);
   comm.Parameters[0].Value = MyModule.Gs_dwbm;
   comm.Parameters["@dwbm"].Direction = ParameterDirection.Input;
   comm.Parameters.Add("retvalue", OdbcType.Int,1);
   comm.Parameters["retvalue"].Direction = ParameterDirection.ReturnValue;   comm.ExecuteNonQuery();   如果把输入参数都删除掉(存储过程也删除掉),只有out 参数时,调用成功,存储过程在后台调试也是成功的。请各位高人给指点!!小弟不胜感激!!

解决方案 »

  1.   

      OdbcCommand comm = new OdbcCommand("Procedure_Pjlq", MyModule.OdbcConn);
      comm.CommandType = CommandType.StoredProcedure;
      comm.Parameters.Add("@pjlx", OdbcType.NVarChar, 2);
      comm.Parameters["@pjlx"].Value = ls_pjlx;
      comm.Parameters["@pjlx"].Direction = ParameterDirection.Input;
      comm.Parameters.Add("@qsh", OdbcType.NVarChar, 15);
      comm.Parameters["@qsh"].Value = ls_qsh;
      comm.Parameters["@qsh"].Direction = ParameterDirection.Input;
      comm.Parameters.Add("@zzh", OdbcType.NVarChar, 15);
      comm.Parameters["@zzh"].Value = ls_zzh;
      comm.Parameters["@zzh"].Direction = ParameterDirection.Input;
      comm.Parameters.Add("@lqr", OdbcType.NVarChar, 8);
      comm.Parameters["@lqr"].Value = MyModule.Gs_czy;
      comm.Parameters["@lqr"].Direction = ParameterDirection.Input;
      comm.Parameters.Add("@dwbm", OdbcType.NVarChar, 5);
      comm.Parameters["@dwbm"].Value = MyModule.Gs_dwbm;
      comm.Parameters["@dwbm"].Direction = ParameterDirection.Input;
      comm.Parameters.Add("dwbm", OdbcType.NVarChar, 5);
      comm.Parameters[0].Value = MyModule.Gs_dwbm;
      comm.Parameters["@dwbm"].Direction = ParameterDirection.Input;
      comm.Parameters.Add("retvalue", OdbcType.Int,1);
      comm.Parameters["retvalue"].Direction = ParameterDirection.ReturnValue;
    红色部分粘代码时 粘多了