datasnap 数据库连接
2014-10-03 18:56
127 查看
datasnap 数据库连接
2011-09-24 13:48:27| 分类: DELPHI | 标签: |举报 |字号大中小 订阅当开发人员开始创建Delphi的DataSnap应用时很常见的数据库连接定义方式是每个数据模块建立一个连接。这样做将产生大量的数据库连接,并产生很多问题。
DelphiXe,提供了Session管理,更容易实现控制客户端连到服务器的数据库连接。客户端应用程序bu不会知道这些,服务器将完成所有的事情。
当我们创建一个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事件是一个设置关联数据集的连接的好地方,可以使用下面的代码来设置。
procedure TServerContainer1.SetConnection(Conn: TSqlConnection);
var
i: integer;
begin
if Conn = nil then Conn := GetConnection; else Conn := Sender;
for i := 0 to ComponentCount - 1 do
if Components[i] is TSQLQuery then
TSQLQuery(Components[i]).SQLConnection := Conn;
end;
为了避免数据库连接泄漏,我们实现了DSServer的OnDisconnect事件。当客户端断开连接时这段持续将运行。
if GetConnection <> nil then
相关文章推荐
- DataSnap Server中共享数据库连接
- (c# Data Access 1) 与数据库连接
- 使用Using System.Data.OleDb; 连接数据库,又一种动态绑定GridView显示数据。
- 多层数据库应用基于Delphi DataSnap方法调用的实现(二)更新数据集
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- 多层数据库应用基于Delphi DataSnap方法调用的实现(四)BLOB字段的读写
- c#学习笔记(数据库连接以及SqlDataReader、SqlCommand的使用)
- 多层数据库应用基于Delphi DataSnap方法调用的实现-----------------对象池技术
- datasnap 2010 利用心跳包清除TCP死连接
- 多层数据库应用基于Delphi DataSnap方法调用的实现(四)BLOB字段的读写
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 数据库组件 Hxj.Data (二十五)(数据库连接配置 - connectionStrings节点)
- DB2 UDB 和 SOAP: 使用 DataSnap 的数据库 Web 服务
- 多层数据库应用基于Delphi DataSnap方法调用的实现(一)返回数据集
- vc.net datalinks 数据库连接
- Socut.Data.dll - ASP.Net数据库(Access或SQL Server)连接操作类
- [C#] 使用VS内置的数据库连接属性对话框(DataConnectionDialog)
- [Excel Services]连接外部数据库,刷新数据的时候遇到“Data Refresh Failed ”的解决方法
- 【数据库连接】Sqlcommand与SqlDataAdapter用法摘录(待整理)
- VS 连接 App_Data 中的数据库