实现用一个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更高 ...
随机推荐
- 在jsp页面如何获得url参数
方法一:当一个url过来时,如:http://localhost:8080/pro/demo/hello.jsp?name=john,在hello.jsp页面,我们可以这样得到name的值: < ...
- 如何使用delphi将Clientdataset的Delta保存到数据库中
[delphi] view plain copy //ATableName-表名, AKeyField-主键,多个主键用;隔开,如 ;pid;times; from:unit HlsImplBase; ...
- 禁用composer update命令
composer update 命令会直接把依赖的包更新到最新,会导致整个项目代码都是没有经过测试的不稳定代码 所以一定要禁止使用该命令. 正确的做法是: 更新指定的包到指定的版本(高版本的包也可以更 ...
- Git学习教程三之分支管理
实战流程: 1:代码库克隆一份至本地 2:新分支操作 2.1 在需要的文件中创建并指向新的分支方便写代码 git checkout -b <name> 2 ...
- Redis4.0新特性 -Lazy Free
Redis4.0新增了非常实用的lazy free特性,从根本上解决Big Key(主要指定元素较多集合类型Key)删除的风险.笔者在redis运维中也遇过几次Big Key删除带来可用性和性能故障. ...
- uni-app相关
uni-app 中以下组件的高度是固定的,不可修改: 导航栏高度固定为 44pxtabBar 高度固定为 56px 状态栏比较特殊,是一个变量 .status_bar{ height: var(--s ...
- 酷Q插件_SDK———入门与使用
1.这里使用的是易语言的SDK,所以请看不惯的人自行离开.{wymbf.} 1.2 这里不会直接给你工程,请用动手打代码,动脑思考. 1.3 不知道.不了解酷Q是干嘛的,请访问:https://cqp ...
- 【VS开发】CTabView多页卡界面
转载地址:http://blog.csdn.net/akof1314/article/details/5618454 目录(?)[-] Public Methods Protected Methods ...
- Java-Redis JdkSerializationRedisSerializer和StringRedisSerializer
在将redis中存储的数据进行减一操作时出现: io.lettuce.core.RedisCommandExecutionException: ERR value is not a valid flo ...
- 快速排序的Python代码实现
选择一个数,和它后面的数比较,把比它小的放在它的左边,大的在右边(位置可能会因为左边元素的添加而右移) def quick_sort(arr): if arr==[]: return[] else: ...