实现用一个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更高 ...
随机推荐
- PHP yii2.0框架利用mpdf导出pdf
安装: composer require mpdf/mpdf 使用: use Mpdf\Mpdf;//(php7以前) //获取页面内容 $res = $this->controller-> ...
- openstack部署glance
一.建立glance数据库并且给权限设置第三方登录 mysql -uroot -p0330 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance ...
- eclipse JavaEE spring,spring mvc,mybits-SSM老年人搭建记录
老求了,好多东西记不住了,再不记以后怕是记不住了. eclipse JAVAEE for web Version: Mars.2 Release (4.5.2) tomcat 7.0.29 sprin ...
- 删除ELK的索引
终于找到一个工具,curator,可以搜索相关信息. 记录一下: 1,查询索引: curator_cli --host 10.2.16.191 --port 9200 show_indices - ...
- 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题
参考:首先,声明一点,凡是使用malloc之类命令动态申请的内存,必须进行释放操作,否则就会发生内存泄漏问题. DLL中申请的内存释放,如果没有做过,很可能会认为是直接在调用程序中释放就可以了,其实不 ...
- sha256算法原理
1. SHA256简介 SHA256是SHA-2下细分出的一种算法 SHA-2下又可再分为六个不同的算法标准 包括了:SHA-224.SHA-256.SHA-384.SHA-512.SHA-512/2 ...
- python-文件常用操作
文件内建函数和方法: open()——打开文件 read()——输入 readline()——输入一行 seek()——文件内移动 write()——输出 close()——关闭文件 练习:
- Oracle创建表空间、创建用户,给用户分配表空间以及可操作权限
创建表空间一共可分为四个步骤 具体脚本如下: 第1步:创建临时表空间 create temporary tablespace yd_temp tempfile 'D:\oracledata ...
- with上下文管理 python魔法方法
with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...
- Ruby Rails学习中:网站导航,Bootstrap和自定义的CSS,局部视图
添加一些结构 一.网站导航 1.添加一些结构后的网站布局文件 打开文件:app/views/layouts/application.html.erb 简单介绍一下,添加的代码: 我们从上往下看一下这段 ...