.NET下数据库的负载均衡(有趣实验)(续)
.NET下数据库的负载均衡(有趣实验)这篇文章发表后,受到了众多读者的关注与好评,其中不乏元老级程序员。
读者来信中询问最多的一个问题是:它是否能支持“异种数据库”的负载均衡??
今天就在此统一回复:能(暂时只能在.Net6版本下实现。.Net Framwork版本后续会再实现。)
下面就举一例,给出实现“异种数据库”负载均衡的两种方法。
首先,把配置负载均衡策略的ds.xml文件修改为多个异种数据库,如下:
<?xml version="1.0" encoding="utf-8" ?>
<DeveloperSharp>
<DatabaseClusterList>
<DatabaseCluster Id="StudentData">
<Database Id="A1" Enable="true" Weight="100" DatabaseType="SqlServer" ConnectionString="Server=localhost;Database=YZZ;Uid=sa;Pwd=123"/>
<Database Id="A2" Enable="true" Weight="100" DatabaseType="MySql" ConnectionString="Host=localhost;Database=YZZ;User Id=root;password=123"/>
<Database Id="A3" Enable="true" Weight="100" DatabaseType="PostgreSql" ConnectionString="Server=127.0.0.1;Database=YZZ;Port=5432;User Id=postgres;Password=123;"/>
</DatabaseCluster>
</DatabaseClusterList>
</DeveloperSharp>
说明:以上配置了异种的Sql Server、MySql、PostgreSql三个数据库来做负载均衡。
方法一:
SLB.IDA.ConnectionString //数据库链接字符串
SLB.IDA.DatabaseType //数据库类型
无论你的数据库访问工具是Entity Framework、Dapper、SqlSugar、FreeSql、等等,只要有了如上两个参数,你就能自行实现相应的数据库操作。
(注:看懂本文思路的前提,是你已经阅读过.NET下数据库的负载均衡(有趣实验)这篇文章)
方法二:
var IDA = SLB.IDA;
//接下来,直接通过IDA进行各类数据库操作
【示例1:查询】
下面,首先直接给出一个“查询多数据+选出单数据+参数”的使用示例,代码如下:
//查询多数据
var Students1 = IDA.SqlExecute<stu>("select * from t_Student"); //查询多数据(带参数)
var IdMin = IDA.CreateParameterInput("IdMin", DbType.Int32, 2);
var LikeName = IDA.CreateParameterInput("LikeName", DbType.String, 50, "%周%");
var Students2 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", IdMin, LikeName);
//另一种写法
var Students3 = IDA.SqlExecute<stu>("select * from t_Student").Where(t => t.Id > 2 && t.Name.Contains("周")); //选出单数据
var OneStudent = Students2.FirstOrDefault();
其中stu实体类代码如下形式:
public class stu
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
//此实体类中的Id、Name、Age属性名,要与数据表中的Id、Name、Age字段名对应
注意:创建参数时使用DbType类型,就是为了能在不同类型数据库(SqlServer、MySql、Oracle、等)之间透明切换!
【示例2:分页】
承接上面“示例1”的代码,若我们要对Students1、Students2进行分页操作(比如:每页20条,取出第5页),相关代码如下:
using DeveloperSharp.Extension;//调用“分页功能”需要引用此命名空间
-------------------------- var Page1 = Students1.PagePartition(20, 5);
var Page2 = Students2.PagePartition(20, 5); //一气呵成的写法
var Page3 = IDA.SqlExecute<stu>("select * from t_Student").PagePartition(20, 5);
【示例3:增/删/改】
前面谈完“查询”,我们接下来谈谈“增/删/改”的使用方式,下面是一个“修改数据+参数+事务”的使用示例:
try
{
//开启事务
IDA.TransactionBegin(); //修改数据(多语句)
int affectedRows1 = IDA.SqlExecute("insert into t_Student(Name,Age)values('ww','96');update t_Student set Age=100 where Id=1006"); //修改数据(带参数)
var NewAge = IDA.CreateParameterInput("NewAge", DbType.Int32, 200);
var NewName = IDA.CreateParameterInput("NewName", DbType.String, 50, "孙悟空");
int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@NewName,@NewAge)", NewName, NewAge); //完成事务
IDA.TransactionCommit();
}
catch
{
//回滚事务
IDA.TransactionRollBack();
}
【示例4:其它】
最后,我们给出一个“聚合函数+输出参数”的使用示例,代码如下:
var IdMax = IDA.CreateParameterInput("IdMax", DbType.Int32, 20);
var TotalCount = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//此项为输出参数
var Students3 = IDA.SqlExecute<stu>("select @TotalCount=count(*) from t_Student where Id<@IdMax", TotalCount, IdMax);
int tc = (int)TotalCount.Value;
灵活学习+使用以上4个示例,就能满足几乎所有的数据操作需求。
另外,你有没有发现,上述所有的数据操作几乎只用了一个方法来实现:SqlExecute/ SqlExecute<T>
IDA内功能方法详细说明(辅助参考):
SqlExecute<T>
声明:IEnumerable<T> SqlExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:执行Sql语句(Select类)
参数:(1)string cmdText -- Sql语句
(2)params IDataParameter[] Params -- 参数组
返回:IEnumerable<T> -- 多数据结果集 SqlExecute
声明:int SqlExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sql语句(Insert/Update/Delete类)
参数:(1)string cmdText -- Sql语句
(2)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数 SpExecute<T>
声明:IEnumerable<T> SpExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:执行Sp存储过程(Select类)
参数:(1)string cmdText -- Sp存储过程名
(2)params IDataParameter[] Params -- 参数组
返回:IEnumerable<T> -- 多数据结果集 SpExecute
声明:int SpExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sp存储过程(Insert/Update/Delete类)
参数:(1)string cmdText -- Sp存储过程名
(2)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数
.NET下数据库的负载均衡(有趣实验)(续)的更多相关文章
- .NET下数据库的负载均衡(有趣实验)
相关下载: 数据库的负载均衡-示例代码(dp1-DbBalance.rar) 数据库的负载均衡-示例代码(dp1-DbBalance.rar) 支持.Net/.Net Core/.Net Framew ...
- 理解web服务器和数据库的负载均衡以及反向代理
这里的“负载均衡”是指在网站建设中应该考虑的“负载均衡”.假设我们要搭建一个网站:aaa.me,我们使用的web服务器每秒能处理100条请求,而aaa.me这个网站最火的时候也只是每秒99条请求,那么 ...
- 【Nginx】如何使用Nginx实现MySQL数据库的负载均衡?看完我懂了!!
写在前面 Nginx能够实现HTTP.HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡.那么,问题来了,可不可以通过Nginx实现MySQL数据库的负载均衡呢?答案是:可以.接下来,就让我们一 ...
- 微软Azure 经典模式下创建内部负载均衡(ILB)
微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...
- Windows下apache+tomcat负载均衡
Windows下apache+tomcat负载均衡 网上已经有很多的资料,但是很多都比较零碎,需要整合一起才能搭建出理想的负载均衡,正好前段时间搭建了windows与linux下的负载均衡,在此记录, ...
- 介绍一下再Apache下的Tomcat负载均衡的一些使用问题
在负载均衡技术中,硬件设备是比较昂贵的,对于负载均衡的学习者如果不是在企业中应用或者是学员中学习,很少有机会能碰到实际操作的训练.(http://xz.8682222.com)所以,很多朋友都会选择软 ...
- Linux环境下Nginx及负载均衡
Nginx 简介 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务.前向代理作为客户端的代理,服务端只知道代理的 IP 地址而不知道客 ...
- Windows下Nginx实现负载均衡
Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...
- Mac下配置Nginx负载均衡
1.首先在Mac下安装Nginx(可参考我的另一篇随笔http://www.cnblogs.com/malcolmfeng/p/6896703.html). 2.安装Tomcat,下载后,解压,bin ...
随机推荐
- python base64编码和解码图片
简介 在实际项目中,可能需要对图片进行大小的压缩,较为常见的方法则是将图片转换为base64的编码,本文就python编码和解码图片做出一定的介绍. 代码 import base64 import o ...
- css基础06
精灵图就是只要导入一张照片(这张照片里面有很多很多的小图标和照片),然后通过background-position来移动位置,使网页显示出对应图片或者图标.一般都是负值. 下载然后导入项目里. 不同浏 ...
- 2022了你还不会『低代码』?数据科学也能玩转Low-Code啦! ⛵
作者:韩信子@ShowMeAI 数据分析实战系列:http://www.showmeai.tech/tutorials/40 机器学习实战系列:http://www.showmeai.tech/tut ...
- 羽夏看Linux内核——引导启动(下)
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- LuoguP5022 旅行 (割点,基环树)
// luogu-judger-enable-o2 #include <cstdio> //#include <iostream> #include <cstring&g ...
- Vuex与前端表格施展“组合拳”,实现大屏展示应用的交互增强
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 下图是一个产品开发中非常常见的大屏展示界面 ...
- Fiddler抓包工具下载安装及使用
一.Fiddler简介 简介: Fiddler是一款强大的Web调试工具,他能记录所有客户端和服务器的HTTP/HTTPS请求 工作原理: Fiddler是以代理web服务器的形式工作的,它使用代理地 ...
- 项目导入 Vue Router 4 依赖包流程
下载 Vue Router 4 的依赖包: npm install vue-router@4 新建 router.ts 文件,导入 createRouter 以及 createWebHashHisto ...
- jQuery使用case记录
添加元素/内容追加等 元素内: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 元素外: after() - 在被选元素之后插入内容 before() ...
- OID天下第一 (双指针,LCT,线段树)
题面 或曰:"笑长天下第一!",OID 喜得合不拢嘴:"哈哈哈哈哈哈--" OneInDark 是天下第一的. OneInDark 给了你一个 n n n 个点 ...