〖分享〗一个基于ADO存储过程的池化处理
依据工作的需要而开发,所以这里只选择了MSSQL和Oracle两个数据库。通过相对固定的调用方式,可以很好地让同一个程序在兼容Oracle和MSSQL。
1.约定都采用过程(不是函数)
2.第一个参数为整形,用于存储过程的返回值,即MSSQL存储过程当中的return
3.存储过程都通过记录集返回结果:
Oracle演示存储过程
- SQL code
create or replace procedure Simple_Procedure_Test( Result out Integer, --...--其它参数 PRetCursor out sys_refcursor)isbegin open PRetCursor for select '名称' as "TestName",'值' as "TestValue" from dual; --返回一个结果集 Result := 1; --MSSQL 的return值 return;end;
MSSQL演示存储过程
- SQL code
create procedure Simple_Procedure_TestAsbegin select '名称' as [TestName],'值' as [TestValue] --返回一个结果集 return 1 --MSSQL 的return值end
Oracle演示代码
- Delphi(Pascal) code
procedure TestOracle;var ADOPoolMan: TADOConnPoolMan; ProcObj: TADOConnPoolObject; Proc: TADOStoredProc;begin ADOPoolMan := TADOConnPoolMan.Create(Alias,dbUser,DbPass,DBName,true,ado_dtOracle); try ProcObj := ADOPoolMan.CreateSP('Simple_Procedure_Test'); if ProcObj = Nil then Exit;//错误处理 try Proc := ProcObj.ExecObject as TADOStoredProc; Proc.Close; //参数填充 //... Proc.Open; ShowMessage('Result = ' +Proc.Parameters.ParamByName('Result')); ShowMessage(Proc.Fields[0].FieldName + '=' + Proc.Fields[0].Value + #13#10 + Proc.Fields[1].FieldName + '=' + Proc.Fields[1].Value); finally ADOPoolMan.FreeObject(ProcObj); end; finally ADOPoolMan.Free; end;end;MSSQL演示代码
- Delphi(Pascal) code
procedure TestMSSQLServer;var ADOPoolMan: TADOConnPoolMan; ProcObj: TADOConnPoolObject; Proc: TADOStoredProc;begin ADOPoolMan := TADOConnPoolMan.Create(Alias,dbUser,DbPass,DBName,true,ado_dtMSSQL); try ProcObj := ADOPoolMan.CreateSP('Simple_Procedure_Test'); if ProcObj = Nil then Exit;//错误处理 try Proc := ProcObj.ExecObject as TADOStoredProc; Proc.Close; //参数填充 //... Proc.Open; ShowMessage('Result = ' +Proc.Parameters.ParamByName('Result')); ShowMessage(Proc.Fields[0].FieldName + '=' + Proc.Fields[0].Value + #13#10 + Proc.Fields[1].FieldName + '=' + Proc.Fields[1].Value); finally ADOPoolMan.FreeObject(ProcObj); end; finally ADOPoolMan.Free; end;end;下面是模块代码,仅供参考,如果有觉得不够完善,并且愿意完善的同仁欢迎完善,比如这里只做了存储过程,但是TADOConnPoolObject.ExecObject返回的是基类TCustomADODataSet,因此可以支持ADOQuery,ADOCommand等作为“池”元素。
PS:分数不多,发到技术区主要是为了可能的奖励^_^
[解决办法]
谢谢僵哥分享!学习了!
[解决办法]
THX
MARK
[解决办法]
僵哥,使用Delphi的数据库组件如ADOConnection如何连接到远程数据库呢??
[解决办法]
完了,注意,跑偏了,越了。回liangpei, 阿三不收拾我吧???
[解决办法]
mark
[解决办法]
过来看看。。。
[解决办法]
好的
[解决办法]
学习了。。。顶一个!虽然有些还看不太懂,不过还是会继续努力的
[解决办法]
学习了!!!
[解决办法]
学习
[解决办法]
create procedure Simple_Procedure_Test
As
begin
select '名称' as [TestName],'值' as [TestValue] --返回一个结果集
[解决办法]
本身就可以的
[解决办法]
过来充电
[解决办法]
up
[解决办法]
顶
[解决办法]
很强大
[解决办法]
好的
[解决办法]
学习中
[解决办法]
[解决办法]
mark