c#常用数据库封装再次升级
c#封装的几类数据库操作:
1.sqilte
2.berkeleydb
3.一般数据库
4.redis
包含其他项目: 1.序列化 2.通信 3.自定义数据库连接池
再次升级内容:
1.新增redis客户端操作(修改)
2.UDP分报组包重发
3.数据库连接池重构
4.完善了整个框架流程
5.做成了一个完整的结构,但是没有完整测试,所有模块测试通过
6.新增LRU本地缓存,完成整个类型的存储
7.定义了作为服务的整个结构,传输序列化。
8.作为服务端,解决了超时的问题,超时回复,超时设置。
9.做服务端数据库操作,添加了datatable转换Modle类型,可以在客户端设置;这里考虑充分利用服务端优势。
10.增加一个守护程序,该程序没有用途,只是作为一个服务端的完整性添加的。它的作用就是启动以后将同目录的数据库服务程序干掉,然后重启。它什么时间启动?就是超时,以前遇到一个问题。国产数据库使用时间长了,当连接时不返回,会卡死,这样积累下来,会有很多线程卡住,直到整个服务没有办法用。当前不是真实项目,所以用了很粗的处理办法,规定一个最大线程和超时,一旦发现阻塞到了最大线程,则启动守护程序,守护程序启动后将服务干掉,然后再次启动服务。然后守护程序自己退出。
说明:如果要转换,客户端请求时需要设置ModelCls(Model类),包括名称空间,如果名称空间和程序集不同名称,则还要设置ModelDLL名称。默认服务端所有Model程序集放置在models目录中。但是必须遵守格式,为了安全,我定义了一个特性,Model上必须使用特性映射列名称。可以慢慢研究,欢迎留言。
传输请求:
由于定义的连接池支持多个数据库访问,只需要根据配置文件名称(或者默认),你可以访问任意数据库;在内部只有名称。
所以传输请求类中也有个字段DBCfg,名字没有取号,只有一个数据库时,不设置则直接访问默认数据库,如果多个则必须设置。
TimeOut则是执行超时设置,可以自定义,可以使用服务端默认值,可以用不超时一直执行等待完成。
RequestID:需要客户端自己产生一个全局唯一值,这个不重要,只有在客户端异步,需要找到你请求的执行时,与返回的结构匹配,能够让客户端自己监视回调。没有其他作用。
DBModel项目中还有返回结果,另外封装了枚举类型的扩展方法,还有参数化SQL的设置对象。
整个流程说明:
其实整个传围绕传输类型DBTransfer来的,在DBModel项目中,模板的化的回复结构也在改项目中。后面附上改类定义,另外需要设置类型,后面也会设置。
至此,整个包括了SQL数据库(连接池任意配置),本地KV数据库(berkeleydb),本地SQL数据库(Sqlite),内存SQL数据库(Sqlite),内存NOSQL数据库(redis),内存KV存储(LRU缓存)
代码附加:
public enum DBServerType
{
[Description("关系数据库")]
ServerSQL,
[Description("本地SQL数据库")]
LocalSQL,
[Description("内存SQL数据库")]
MemorySQL,
[Description("内存NoSQL数据库")]
MemoryNoSQL,
[Description("本地KV数据库")]
LocalKV,
[Description("其它数据库,redis,mongdb等")]
NoSQL
}
/// <summary>
/// 传输请求
/// </summary>
public class DBTransfer
{
public DBTransfer()
{
TimeOut = -1;
}
/// <summary>
/// SQL语句
/// </summary>
public string SQL { get; set; }
/// <summary>
/// SQL参数
/// </summary>
public Dictionary<string,DBParameter> SQLParamter { get; set; }
/// <summary>
/// 数据库类型
/// </summary>
public DBServerType DBServerType { get; set; }
/// <summary>
/// 是否是查询SQL
/// </summary>
public bool IsQuery { get; set; }
/// <summary>
/// 执行SQL是否是获取单值
/// </summary>
public bool IsScala { get; set; }
/// <summary>
/// 查询时是否转换成Model
/// </summary>
public bool IsModel { get; set; }
/// <summary>
/// IsModel=true,转换的model名称(包括名称空间)
/// </summary>
public string ModelCls { get; set; }
/// <summary>
/// 需要单独设置时,否则直接使用空间名称相同dll
///
/// </summary>
public string ModelDLL { get; set; }
/// <summary>
/// NoSQL参数
/// </summary>
public Dictionary<object,object> Paramter { get; set; }
/// <summary>
/// 数据库名称或者配置名称(SQL)
/// </summary>
public string DBCfg { get; set; }
/// <summary>
/// 请求ID,用于辨别返回请求
/// 将会与返回对应,处理客户端的异步
/// </summary>
public long RequestID { get; set; }
/// <summary>
/// 执行超时,不是网络超时(秒)
///-1,采用服务端设置 0,此次执行用不超时,大于0则超时时间
///默认-1
/// </summary>
public int TimeOut { get; set; }
}
-------------------------------------------------------------
/// <summary>
/// 返回结果
/// </summary>
public class RequestResult
{
/// <summary>
/// 返回值
/// </summary>
public object Result { get; set; }
/// <summary>
/// 结果编码
/// </summary>
public ErrorCode Error { get; set; }
/// <summary>
/// 结果编码描述
/// </summary>
public string ErrorMsg { get; set; }
/// <summary>
/// 结果附近信息
/// 主要是异常信息或者其它描述
/// 例如:结果被截取
/// </summary>
public string ReslutMsg { get; set; }
/// <summary>
/// 服务端分配的一个ID
/// </summary>
public long ID { get; set; }
/// <summary>
/// 客户端的ID
/// </summary>
public long RequestID { get; set; }
}
c#常用数据库封装再次升级的更多相关文章
- c# 常用数据库封装
我不为大家贴代码了,没有意思,有点多,我主要给大家介绍一下,源码会上传CSDN和GIT:我定义了一个ADO.NET操作接口,所有按照接口封装 1.sqlite数据库(需要SQLite.Interop. ...
- React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)
React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例) TextInput组件介绍 TextInput是一个允许用户在应用中通过键盘输入文本的基本组 ...
- 常用数据库的驱动程序和Url地址
常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jd ...
- Oracle数据库异机升级
环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...
- 常用数据库 JDBC URL 格式
一 常用数据库 JDBC URL 格式 1 sqLite 驱动程序包名:sqlitejdbc-v056.jar 驱动程序类名: org.sqlite.JDBC JDBC URL: jdbc:sqli ...
- JDBC ----常用数据库的驱动程序及JDBC URL:
常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL ...
- 常用数据库的驱动类/URL/默认端口
常用数据库的驱动类/URL/默认端口 1.Oracle: 格式: 驱动:oracle.jdbc.driver.OracleDriver URL:jdbc:oracle:thin ...
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包
[-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...
- mysql数据库封装和 分页查询
1 之前我们学到了php连接mysql数据库的增删改查,中间要多次调用数据库, 而且以后用到的表比较多,上传中如果需要改数据的话会非常麻烦,但是如果 我们把数据库封装,到时就可以很轻松的把改掉一些数据 ...
随机推荐
- node.js async/await 继发执行与并发执行
async/await 继发执行与并发执行,看如何控制 两个异步函数 foo bar function foo() { return new Promise((resolve, reject) =&g ...
- 初识MySQL——人生若如初相逢
CREATE TABLE `student`(`studentNo` INT (4) NOT NULL PRIMARY KEY COMMENT '学号',`loginPwd` VARCHAR(20) ...
- DOM的概念和简单应用:使用DOM解析XML数据
概念:DOM是Document Object Model的简称,即文档数据模型. Oracle公司提供了JAXP(Java API for XML Processing)来解析XML.JAXP会把XM ...
- Junit入门教程
做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...
- 《CSS实现单行、多行文本溢出显示省略号》
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方式: overflow: hidden; te ...
- 使用cookie实现只出现一次的广告代码效果
我们上网经常会遇到第一次需要登录而之后不用再登录的网站的情况,其实是运用了Cookie 存储 web 页面的用户信息,Cookie 以名/值对形式存储,当浏览器从服务器上请求 web 页面时, 属于该 ...
- ASP.NET MVC4 with MySQL: Configuration Error (MySql.Web.v20)
今天在浏览ASP.NET项目时,提示如下错误: Could not load file or assembly ‘MySql.Web.v20, Version=6.9.4.0, Culture=neu ...
- 搭建JUnit环境
1.下载 JUnit,这里用JUnit 4.7 下载链接: http://pan.baidu.com/s/1c23n7LQ 密码: i18e 2.可以直接 build path 引入:也可以创建 Us ...
- constructor()方法
在做微信小程序的时候,需要对传输的数据进行加密,大牛给我介绍constructor()方法,不是很懂这个但是用了一次,今天来用自己的想法来理解这个方法 ———————————————————————— ...
- 常见WEB开发安全漏洞 原因分析及解决
目 录 1 会话标识未更新 3 1.1 原因 3 1.2 解决 3 2 SQL注入 3 2.1 原因 3 2.2 解决 5 3 XSS跨站脚本编制 5 3.1 原因 5 3.2 解决 5 4 XSRF ...