用ADOConnection连接数据库调用执行存储过程,如果conntectionString使用'Provider=MSDAORA.1'即微软的oracle的ado驱动,一切正常;
但使用'Provider=OraOLEDB.Oracle.1'这个Oracle的驱动,就报错了,程序代码如下:with ADOStoredProc1 do
begin
Connection := ADOConnection1;
Close;
Parameters.Clear;
ProcedureName:= p_name;
Parameters.CreateParameter('p1',ftString,pdInput,200,p_sql);
Parameters.CreateParameter('p2',ftInteger,pdInput,10,P_size);
Parameters.CreateParameter('p3',ftInteger,pdInput,10,p_cur);
Parameters.CreateParameter('p4',ftInteger,pdOutput,10,0);
Parameters.CreateParameter('p5',ftInteger,pdOutput,10,0);
Open;
end;在ADOStoredProc1 的open时,报错"参数类型或个数不对"我的存储过程定义是这样的:
procedure P_QuerySplit(sqlscript in varchar2, --表名/SQL语句
pageSize in integer, --每页记录数
pageIndex in integer, --当前页
totalCount out number, --返回总记录数
totalPage out number, --返回总页数
v_cur out sys_refcursor --返回游标
);
怎么回事啊?
但使用'Provider=OraOLEDB.Oracle.1'这个Oracle的驱动,就报错了,程序代码如下:with ADOStoredProc1 do
begin
Connection := ADOConnection1;
Close;
Parameters.Clear;
ProcedureName:= p_name;
Parameters.CreateParameter('p1',ftString,pdInput,200,p_sql);
Parameters.CreateParameter('p2',ftInteger,pdInput,10,P_size);
Parameters.CreateParameter('p3',ftInteger,pdInput,10,p_cur);
Parameters.CreateParameter('p4',ftInteger,pdOutput,10,0);
Parameters.CreateParameter('p5',ftInteger,pdOutput,10,0);
Open;
end;在ADOStoredProc1 的open时,报错"参数类型或个数不对"我的存储过程定义是这样的:
procedure P_QuerySplit(sqlscript in varchar2, --表名/SQL语句
pageSize in integer, --每页记录数
pageIndex in integer, --当前页
totalCount out number, --返回总记录数
totalPage out number, --返回总页数
v_cur out sys_refcursor --返回游标
);
怎么回事啊?
2.看看ADOStoredProc1.Parameters各个的参数和类型;
3.我尽量避免使用.CreateParameter方法!
试试我的方法把!
begin
Connection := ADOConnection1;
Close;
ProcedureName:= p_name;
Parameters.Refresh ;
Parameters.ParamByName('p1').value :=200;
Parameters.ParamByName('p2').value :=10;
Parameters.ParamByName('p3').value :=10;
Parameters.ParamByName('p4').value :=10;
Parameters.ParamByName('p5').value :=10;
Open;
end;这样试试
begin
Connection := ADOConnection1;
Close;
ProcedureName:= p_name;
Parameters.Refresh ;
Parameters.ParamByName('p1').asstring:=200;
Parameters.ParamByName('p2').asstring:=10;
Parameters.ParamByName('p3').asstring:=10;
Parameters.ParamByName('p4').asstring:=10;
Parameters.ParamByName('p5').asstring:=10;
Open;
end;