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#常用数据库封装再次升级的更多相关文章

  1. c# 常用数据库封装

    我不为大家贴代码了,没有意思,有点多,我主要给大家介绍一下,源码会上传CSDN和GIT:我定义了一个ADO.NET操作接口,所有按照接口封装 1.sqlite数据库(需要SQLite.Interop. ...

  2. React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)

    React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例) TextInput组件介绍 TextInput是一个允许用户在应用中通过键盘输入文本的基本组 ...

  3. 常用数据库的驱动程序和Url地址

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jd ...

  4. Oracle数据库异机升级

    环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...

  5. 常用数据库 JDBC URL 格式

    一 常用数据库 JDBC URL 格式 1 sqLite  驱动程序包名:sqlitejdbc-v056.jar 驱动程序类名: org.sqlite.JDBC JDBC URL: jdbc:sqli ...

  6. JDBC ----常用数据库的驱动程序及JDBC URL:

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar  驱动类的名字:oracle.jdbc.driver.OracleDriver  JDBC URL ...

  7. 常用数据库的驱动类/URL/默认端口

    常用数据库的驱动类/URL/默认端口 1.Oracle:     格式:     驱动:oracle.jdbc.driver.OracleDriver     URL:jdbc:oracle:thin ...

  8. c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包

    [-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...

  9. mysql数据库封装和 分页查询

    1 之前我们学到了php连接mysql数据库的增删改查,中间要多次调用数据库, 而且以后用到的表比较多,上传中如果需要改数据的话会非常麻烦,但是如果 我们把数据库封装,到时就可以很轻松的把改掉一些数据 ...

随机推荐

  1. CentOS安装nginx方法命令教程

    1.依赖项和必要组件 yum install -y make cmake gcc gcc-c++ yum install -y pcre pcre-devel yum install -y zlib ...

  2. union、except和intersect查询

    1. union联合查询  (合并) select r.room_id from room r union select rp.num from room_type rp 要求表1和表2的查询结果结构 ...

  3. Error creating bean with name 'com.cloud.feign.interfaces.xxxFeignClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalSt.PathVariable annotation was empty on

    环境: Spring Cloud:Finchley.M8 Spring Boot:2.0.0.RELEASE 报错信息: Error creating bean with name 'com.clou ...

  4. Scarpy框架持久化存储

    一.介绍 持久化存储操作分为两类:磁盘文件和数据库. 而磁盘文件存储方式又分为:基于终端指令和基于管道 二.基于终端指令的持久化存储 Scrapy是通过 scrapy 命令行工具进行控制的. 这里我们 ...

  5. scss-@mixin传参

    混合器一个很重要特性就是可以传递参数,可以根据不同场景来定制css代码的复用.极大提高了混合器的适用性,看如下scss代码实例: @mixin makeradius($radius) { border ...

  6. easyui datagrid 本地json数据 实现删除

    html代码:<a href='javascript:void(0);' onclick='Delete(\""+ index +"\")' class= ...

  7. grunt 常用插件有哪些?

    作者:顾城链接:https://www.zhihu.com/question/21917526/answer/19747259来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  8. Flexviewer调用特定的widget

    Flexviewer调用特定的widget: 之前一直是自己添加个固定的key来调用widget 但是后来发现框架早就为你写好啦调用widget的方法 在WidgetManager中有个 public ...

  9. mongodb 3.4 学习 (三)复制集

    复制集(replica set) 复制集是一组mongodb的进程维护同样的数据集,提供冗余与高可用性.最小的复制集由3台服务器(或者3个实例)组成,最多1个primary和2个secondary实例 ...

  10. MongoDB数据库 备份 还原

    MongoDB数据库 1.备份用        mongodump 2.还原用        mongorestore 1.备份 @echo offecho 正在备份MongoDB数据库SET mon ...