实现用一个QueryService支持多数据库访问

上图,是在服务端定义多个数据库,准备在客户端通过“联接名称”及“客户端服务名称”访问这些数据库。
基于实现的MultiDBQueryService,将其注册为一个指定客户端服务名称的服务,如下图:

这里,只要设置客户端服务名称及服务类名称即可。其他项不用设置,客户端服务名称设置为djwkQueryService,服务类名称设置为TMultiDBQueryServicve。
客户端通过kbmMWClientQuery查询指定的数据库:
procedure TTestForm.Button1Click(Sender: TObject);
begin
kbmMWClientQuery1.QueryService:='djwkQueryService';//在服务端定义的客户端服务名称
kbmMWClientQuery1.QueryServiceVersion:='1.0';
kbmMWClientQuery1.Query.Text:='Select * from sys_versioninfo';
kbmMWClientQuery1.ActiveClient.Data:='djexam';//在服务端定义的数据库联接名称
kbmMWClientQuery1.Open;
end;
上面代码,通过kbmMWClientQuery.ActiveClient.Data属性设置为服务端定义的数据库联接名称,这样,就可以查询指定的数据库了!
另外,在MultiDBQueryService中还实现了一个方法,用来取得服务端所有可用的数据库联接列表,参数表式返回内容的格式,支持两种:有逗号分隔的字符中和Json格式。
procedure TTestForm.Button2Click(Sender: TObject);
begin
Label1.Caption:=c.Request('djwkQueryService','1.0','GetConnectionNameList',['string']);
end;
上面的调用,返回结果用逗号分隔,如:hblexam, djexam, djwkexam, zhjg, djet, lsWeb, TestInfo, xmyt, test, dmjh
把返回的结果再分解,加入一个Combox中,如下图:

下面是分解的代码:
procedure TTestForm.Button2Click(Sender: TObject);
var
s:string;
sa:TArray<string>;
I: Integer;
begin
s:=c.Request('djwkQueryService','1.0','GetConnectionNameList',['string']);
sa:=s.Split([',']);
for I := Low(sa) to High(sa) do
begin
ComboBox1.Items.Add(sa[i]);
end;
ComboBox1.ItemIndex:=0;
end;
下面是调用GetConnectionNameList,返回Json字符串,并解析到ComboBox1中:
procedure TTestForm.Button2Click(Sender: TObject);
var
s:string;
I: Integer;
jo:TJSONObject;
begin s:=c.Request('djwkQueryService','1.0','GetConnectionNameList',['json']);//返回json格式
jo := TJSONObject.ParseJSONValue(s) as TJSONObject;
for i := to jo.GetValue<TJSONArray>('data').Count - do
begin
ComboBox1.Items.Add(jo.GetValue<String>('data[' + i.ToString + '].SessionName'));
end;
jo.Free; end;
这个方法返回json格式的string,如:'{"data":[{"SessionName":"hblexam","Description":""},{"SessionName":"djexam","Description":""}]}'
现在,kbmMW通用服务器KinglandSoftServer更灵活的实现了两种方式来支持多数据库的功能实现!
下图演示了具体的效果:

上图,显示通过GetConnectionNameList按钮取得服务端的所有数据库联接,放入一个ComboBox中供选择不同的数据库联接,Query按钮,按选择的数据库联接,查询数据。
实现用一个QueryService支持多数据库访问的更多相关文章
- .netcore实现一个读写分离的数据库访问中间件
在实际业务系统中,当单个数据库不能承载负载压力的时候,一般我们采用数据库读写分离的方式来分担数据库负载.主库承担写以及事务操作,从库承担读操作. 为了支持多种数据库我们先定义一个数据类型字典.key为 ...
- 一个C#的XML数据库访问类
原文地址:http://hankjin.blog.163.com/blog/static/33731937200942915452244/ 程序中不可避免的要用到配置文件或数据,对于数据量比较小的程序 ...
- 我也来写:数据库访问类DBHelper
一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...
- 我也来写:数据库访问类DBHelper(转)
一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...
- 让ADO.NET Entity Framework 支持ACCESS数据库
如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 接到一个程序和网页交互的项目,用ADO.NET ...
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...
- 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类
一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...
- 学习实践:使用模式,原则实现一个C++数据库访问类
一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦, ...
- PDO是一个“数据库访问抽象层”
PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高 ...
随机推荐
- ZooKeeper Lead选举
前段时间学习了zookeeper,对其中比较难理解并且容易忘掉的知识点做一个记录~ 关键词: myId:表示在集群中,自身对应的id zxId:节点状态发生改变时,产生的一个时间戳,并且这个时间戳全局 ...
- mac被锁有pin码的解锁方法
停用规律: 错误5次密码停用1分钟 再错误3次停用5分钟 在错误1次就停用15分钟 再错误1次就是60分钟了,而且还没输入框了,这时候我们要通过按 option,commond这2个按钮来唤起输入框 ...
- docker启动cavisor监控
docker启动cavisor监控 docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys: ...
- BiGAN的复现
数据集是10000个样本,前8000个训练集,后面的用来测试.每个样本是1*144(重构成12*12的矩阵),将原始BiGAN有编码器.判别器和生成器,将里面的全连接层全部替换成了卷积. from _ ...
- SecureCRT 8.3注册码下载
SecureCRT注册码是一款针对“SecureCRT 8.3”软件而制作的激活破解工具,可以完美激活“SecureCRT”软件,从而达到免费使用的目的.而SecureCRT则是一款非常优秀的且支持s ...
- ReDOS攻击
正则表达式拒绝服务攻击(Regular Expression Denial of Service)当开发人员编写的正则表达式存在缺陷时,攻击者可以构造特殊的字符串来大量消耗服务器资源,最终造成拒绝服务 ...
- 【计算机视觉】【并行计算与CUDA开发】OpenCV中GPU模块使用
CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行:2.传输数据到GPU:3.确定grid,block大小: 4.调用内核 ...
- C学习笔记-数据类型
常量 在程序中不可变化的量,也就不可赋值 常用两种定义方式,#define和const 另外还有一个字符串常量 define #define MAX 100 #define在预编译的时候,其实也是做的 ...
- 论文阅读 | ERNIE: Enhanced Representation through Knowledge Integration
摘要 知识加强的语义表示模型. knowledge masking strategies : entity-level masking / phrase-level masking 实 ...
- 企业场景-网站目录安全权限深度讲解及umask知识
站点目录的文件和目录给什么权限: 默认权限是安全权限的临界点,工作中尽量给这个临界点,或者小于临界点,不要大于临界点权限. 默认权限分配的命令 umask 在linux下文件的默认权限是由umask值 ...