DataSnap客户端共享服务器端的数据库连接
客户端的一个连接(SQLConnection)能够共享服务器方法对数据库的访问连接。这样就可以做到一个客户端连接唯一关联服务器端的一条数据库连接;通过该共享连接,在客户端可以直接执行数据库的SQL语句以及存储过程,并且可以与服务器端的调用方法处于相同的事
客户端的一个连接(SQLConnection)能够共享服务器方法对数据库的访问连接。这样就可以做到一个客户端连接唯一关联服务器端的一条数据库连接;通过该共享连接,在客户端可以直接执行数据库的SQL语句以及存储过程,并且可以与服务器端的调用方法处于相同的事务上下文中。
共享连接的实现,是通过客户端调用服务器的一个返回TDBXConnection实例的方法来实现的。该返回实例并不是真正地返回到客户端,它仍然保留在服务器端,客户端随后提交执行的SQL语句或存储过程,就是由此实例来负责完成。为在客户端实现上的方便起见,返回TDBXConnection实例的服务器端调用方法可以在客户端的SQLConnection控件的TDBXPropertyNames.ServerConnection属性中指定,当客户端执行SQLConnection.Open时,就获得了一个服务器端的数据库共享连接。比如服务器端提供了这样一个函数:function TServerMethods1.GetShareConn: TDBXConnection,ServerConnection属性就设置为'TServerMethods1.GetShareConn'。
DataSnap也提供了一个内建方法DSAdmin.GetConnection返回TDBXConnection,客户端可以直接使用它来建立共享连接。但此方法要求服务器端部署dbxconnections.ini文件。在设计时,可以在IDE的Data Explorer预先创建一个数据库连接,比如取名为'myoracleconnection'。则客户端的ServerConnection属性就设置为DSAdmin.GetConnection("myoracleconnection")。
客户端共享连接的使用也是很简单的。客户端SQLConnection控件的Driver属性是'DataSnap',本来在客户端不能直接提交执行SQL语句或存储过程的,但在建立共享连接之后,就可以把该SQLConnection控件视为已经连接到数据库而不是DataSnap服务器,我们就可以在客户端放入TSQLDataSet控件,指定SQL语句或存储过程来执行;如果要返回数据集,就再放入TDataSetProvider、TClientDataSet等控件来实现。这样一来,就与以前的二层数据库应用开发非常类似了。
客户端在使用共享连接提交执行SQL语句或存储过程的同时,仍然可以通过该SQLConnection调用DataSnap服务器端暴露的服务器方法。
共享连接这种应用形式并不常见,但在某些特殊场合可能有用,比如由客户端完成数据库事务处理操作的时候。同时,共享连接,也可以减少数据库的并发连接数量,从而有效地降低服务器的资源使用情况。
推荐阅读
-
浅谈django url请求与数据库连接池的共享问题
-
详解Node.js模块间共享数据库连接的方法
-
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
-
本地客户端(自己的电脑)连接远程Oracle数据库(服务器端),客户端安装步骤
-
详解Node.js模块间共享数据库连接的方法
-
QT客户端及服务器端的连接及数据发送
-
Navicat 连接服务器端中的docker数据库的方法
-
DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .
-
DataSnap客户端共享服务器端的数据库连接
-
MySQL 客户端不输入用户名和密码直接连接数据库的2个方法_MySQL