上图,是在服务端定义多个数据库,准备在客户端通过“联接名称”及“客户端服务名称”访问这些数据库。

基于实现的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支持多数据库访问的更多相关文章

  1. .netcore实现一个读写分离的数据库访问中间件

    在实际业务系统中,当单个数据库不能承载负载压力的时候,一般我们采用数据库读写分离的方式来分担数据库负载.主库承担写以及事务操作,从库承担读操作. 为了支持多种数据库我们先定义一个数据类型字典.key为 ...

  2. 一个C#的XML数据库访问类

    原文地址:http://hankjin.blog.163.com/blog/static/33731937200942915452244/ 程序中不可避免的要用到配置文件或数据,对于数据量比较小的程序 ...

  3. 我也来写:数据库访问类DBHelper

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  4. 我也来写:数据库访问类DBHelper(转)

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  5. 让ADO.NET Entity Framework 支持ACCESS数据库

    如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 接到一个程序和网页交互的项目,用ADO.NET ...

  6. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

  7. 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

    一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...

  8. 学习实践:使用模式,原则实现一个C++数据库访问类

    一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦, ...

  9. PDO是一个“数据库访问抽象层”

    PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高 ...

随机推荐

  1. PHP yii2.0框架利用mpdf导出pdf

    安装: composer require mpdf/mpdf 使用: use Mpdf\Mpdf;//(php7以前) //获取页面内容 $res = $this->controller-> ...

  2. openstack部署glance

    一.建立glance数据库并且给权限设置第三方登录 mysql -uroot -p0330 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance ...

  3. eclipse JavaEE spring,spring mvc,mybits-SSM老年人搭建记录

    老求了,好多东西记不住了,再不记以后怕是记不住了. eclipse JAVAEE for web Version: Mars.2 Release (4.5.2) tomcat 7.0.29 sprin ...

  4. 删除ELK的索引

    终于找到一个工具,curator,可以搜索相关信息. 记录一下: 1,查询索引:   curator_cli --host 10.2.16.191 --port 9200 show_indices - ...

  5. 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题

    参考:首先,声明一点,凡是使用malloc之类命令动态申请的内存,必须进行释放操作,否则就会发生内存泄漏问题. DLL中申请的内存释放,如果没有做过,很可能会认为是直接在调用程序中释放就可以了,其实不 ...

  6. sha256算法原理

    1. SHA256简介 SHA256是SHA-2下细分出的一种算法 SHA-2下又可再分为六个不同的算法标准 包括了:SHA-224.SHA-256.SHA-384.SHA-512.SHA-512/2 ...

  7. python-文件常用操作

    文件内建函数和方法: open()——打开文件 read()——输入 readline()——输入一行 seek()——文件内移动 write()——输出 close()——关闭文件 练习:

  8. Oracle创建表空间、创建用户,给用户分配表空间以及可操作权限

    创建表空间一共可分为四个步骤 具体脚本如下: 第1步:创建临时表空间 create temporary tablespace yd_temp       tempfile 'D:\oracledata ...

  9. with上下文管理 python魔法方法

    with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...

  10. Ruby Rails学习中:网站导航,Bootstrap和自定义的CSS,局部视图

    添加一些结构 一.网站导航 1.添加一些结构后的网站布局文件 打开文件:app/views/layouts/application.html.erb 简单介绍一下,添加的代码: 我们从上往下看一下这段 ...