我用做了一个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 参数时,调用成功,存储过程在后台调试也是成功的。请各位高人给指点!!小弟不胜感激!!
存储过程代码如下: 数据库为 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 参数时,调用成功,存储过程在后台调试也是成功的。请各位高人给指点!!小弟不胜感激!!
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;
红色部分粘代码时 粘多了