首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

〖分享〗一个基于ADO存储过程的池化处理解决方案

2012-02-07 
〖分享〗一个基于ADO存储过程的池化处理依据工作的需要而开发,所以这里只选择了MSSQL和Oracle两个数据库。通

〖分享〗一个基于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
[解决办法]

[解决办法]
很强大
[解决办法]
好的

[解决办法]
学习中
[解决办法]

探讨


完了,沒注意,跑偏了,越權了。回頭liangpei, 阿三不會收拾我吧???

[解决办法]
mark

热点排行