1

/

8

当开发人员开始创建

Delphi

DataSnap

应用时很常见的数据库连接定义方式是每个数据模块建立一个连接。

这样做将产生大量的数据库连接,并产生很多问题。

DelphiXe

,提供了

Session

管理,更容易实现控制客户端连到服务器的数据库连接。客户端应用程序不会知道这

些,服务器将完成所有的事情。

当我们创建一个

DataSnap

服务器时,最好的做法就是定义一个服务器容器(数据模块)

,其中包含

DataSnap

务器组件和注册所有的服务器应用程序所需的类。

在这个容器中,

我们将定义一个负责处理服务器的数据库连接

的方法。

作为一个例子,我已经实现了服务器容器上的一个的

getConnection

方法。这个方法负责

为连接池分配连接,这将有每一个客户端连接列表寻找

,

连接池里包含有每个客户端的连接。

private

{ Private declarations }

ListofConnection : TDictionary;

public

function GetConnection : TSQLConnection;

当服务器收到来自新的客户端的连接到数据库的请求时,

getConnection

将创建一个新的连接并添加到

连接池清单。如果客户已经有了一个连接相关联,

getConnection

则只返回的一个

SqlConnection

实例

。连接池使用线程

ID

来控制每个客户端的唯一连接。如果您使用的

DataSnap2010

,你必须用

GetThreadSession

方法来实现这个功能。

function TServerContainer1.GetConnection: TSQLConnection;

var

dbconn : TSQLConnection;

begin

if ListofConnection.ContainsKey(TDSSessionManager.GetThreadSession.Id) then

Result := ListofConnection[TDSSessionManager.GetThreadSession.Id]

else

begin

dbconn := TSQLConnection.Create(nil);

dbconn.Params.Clear;

dbconn.LoadParamsOnConnect := true;

dbconn.ConnectionName := 'DS Employee';

ListofConnection.Add(TDSSessionManager.GetThreadSession.Id, dbconn);

Result := dbconn;

end;

end;

连接定义后,我们需要更新所有数据集使用此连接,这样服务器的所有方法包括

create

和运行时的

SQL

查询都

将要调用

getConnection

方法。

If

you

are

using

the

VCL

Data

components

(TSQLQuery,

TSQLStoredProc,

etc…)

on

your

Server

DataModules,

the

onCreate event is a good place to associate the DataSets with the connection, using the following code.

如果您在服务器上

DataModules

使用

VCL

的数据组件(

TSQLQuery

TSQLStoredProc

...

)

OnCreate

事件是一个设置关联数据集的连接的好地方,可以使用下面的代码来设置。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐