多层数据库应用基于Delphi DataSnap方法调用的实现(一)返回数据集
来源:互联网 发布:黄药师医药软件 编辑:程序博客网 时间:2024/04/29 15:06
从Delphi 2009开始,DataSnap技术发生了很大的变化,并在Delphi 2010和Delphi XE的后续版本中得到了持续的改进。Delphi 2009之前的DataSnap,虽然也实现了对中间层的方法调用,但那是基于COM技术的,实现起来比较麻烦,而且最关键的,是不能直接返回数据集(TDataSet)。如今,基于JSON的DataSnap,已经脱离了COM的束缚,可以很方便地直接返回数据集。我们在开发多层的数据库应用时,就可以采用全新的方式来进行,即客户端的所有数据查询和更新,可以被分割成对中间层多个方法的调用来完成。这种方式带来的最直接效果,就是客户端在完成一个完整的业务操作过程中,客户端到中间层、中间层到数据库的两个连接都不需要被保持,中间层如果再配合对象池、连接池技术,就可以服务于更多数量的客户端,服务器的各种资源也能够得到最大化的利用。
如上图所示,客户端的3个连续活动,完成一个完整的业务操作。整个业务操作,通过两次对中间层的方法调用来完成。两次方法调用中,DataSnap中间层提供方法调用服务的业务类实例可能是不一样的,这取决于类工厂(TDSServerClass)的LifeCycle属性。
下面简单演示一个例子。
1、中间层的实现:
...
{$METHODINFO ON}
TServerMethods1 = class(TDataModule)
SQLConnection1: TSQLConnection;
SQLDataSet1: TSQLDataSet;
private
{ Private declarations }
public
{ Public declarations }
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
function GetEmployeeFullName(EmployeeId: Integer): string;
function GetEmployees: TDataSet;
end;
{$METHODINFO OFF}
...
implementation
...
function TServerMethods1.GetEmployeeFullName(EmployeeId: Integer): string;
begin
Result := 'Employee not found';
with SQLDataSet1 do
begin
CommandText := 'SELECT FIRST_NAME||'' ''||LAST_NAME as FullName ' +
'FROM Employees WHERE Employee_id = :EmployeeId';
ParamByName('EmployeeId').AsInteger := EmployeeId;
Open;
if not eof then Result := FieldByName('FullName').AsString;
end;
end;
function TServerMethods1.GetEmployees: TDataSet;
begin
with SQLDataSet1 do
begin
CommandText := 'SELECT * FROM Employees';
Open;
end;
Result := SQLDataSet1;
end;
...
//我们可以发现,不管中间层实际将有多少个不同的数据集要返回,中间层都只需要两个控件,即
//TSQLConnection和TSQLDataSet,通过在TSQLDataSet的CommandText属性中写入不同的SQL语句,就
//可以返回不同的数据集。
2、客户端的相关代码:
...
TForm2 = class(TForm)
SQLConnection1: TSQLConnection;
Employees: TButton;
SqlServerMethod1: TSqlServerMethod;
DataSetProvider1: TDataSetProvider;
ClientDataSet1: TClientDataSet;
procedure EmployeesClick(Sender: TObject);
private
public
end;
...
//要取得来自于中间层的数据集,使用以上几个控件,它们之间进行关联:
//TClientDataSet-->TDataSetProvider-->TSqlServerMethod-->TSQLConnection-->中间层
implementation
...
//获取数据集
procedure TForm2.EmployeesClick(Sender: TObject);
begin
with SqlServerMethod1 do
begin
ServerMethodName := 'TServerMethods1.GetEmployees';
end;
ClientDataSet1.Open;
end;
...
而数据集的更新,也是通过调用中间层的方法来实现,但需要稍微增加点技巧。敬请等待续集。
- 多层数据库应用基于Delphi DataSnap方法调用的实现(一)返回数据集
- 多层数据库应用基于Delphi DataSnap方法调用的实现(二)更新数据集
- 多层数据库应用基于Delphi DataSnap方法调用的实现(四)BLOB字段的读写
- 多层数据库应用基于Delphi DataSnap方法调用的实现(四)BLOB字段的读写
- 多层数据库应用基于Delphi DataSnap方法调用的实现(四)BLOB字段的读写
- 多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术
- [转]多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术
- 多层数据库应用基于Delphi DataSnap方法调用的实现-----对象池技术
- 多层数据库应用基于Delphi DataSnap方法调用的实现对象池技术
- DataSnap 多层返回数据集分析FireDAC JSON
- Delphi XE5通过DataSnap实现数据库三层应用
- Delphi XE之路(13)开发数据库三层应用的DataSnap
- Delphi DataSnap方法实现BLOB字段的读写
- 基于RIA的多层应用(一)--silverlight的集成
- Delphi 的一个加密和压缩组件 (用于DataSnap多层程序中)
- DataSnap服务器方法返回TClientDataSet的简易实现
- [转]DataSnap服务器方法返回TClientDataSet的简易实现
- Delphi调用MSSQL存储过程返回的多个数据集的方法
- 苦恼
- u-boot启动流程一
- 【转】 大数据量的excel文件读取——excel2007(含代码及示例)
- 1212
- 软件与硬件设计的区别和联系
- 多层数据库应用基于Delphi DataSnap方法调用的实现(一)返回数据集
- 启用SQL Server 2005 Express的sa用户名
- jQuery-对Select的操作集合[终结篇]
- JAVA访问控制符和动态绑定
- document.execcommand方法
- poj1504
- 魔鬼藏在细节中
- js new Open window vaule send and receive get Problem
- Apache目录明细