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. 【读书笔记】C#高级编程(一).NET体系结构

    写在前面:从业两年来,一直停留在会用的阶段,而没有去仔细思考过为什么这么用,之前也大致扫过<c#高级编程>一书,这次想借一袭脑海中的冲动,再次好好仔细过过这本书,夯实基础,温故知新. 一. ...

  2. Java 枚举 获取前后元素,下一个元素

    https://blog.csdn.net/jiangshanwe/article/details/79119219

  3. C#学习笔记12

    1.在使用反射时,反射可以绕过安全访问级别(private.protected)修饰的类或属性,来获取需要的信息. 2.泛型的反射:可以使用Type.ContainsGenericParameters ...

  4. sql and csharp: Split Function

    T-SQL: declare @int int,@prov int,@city int,@str nvarchar(500) set @str='天河麗特青春:中國廣東省廣州市天河區天河路623號天河 ...

  5. jQuery二——属性操作、文档操作、位置属性

    一.jquery的属性操作 jquery对象有它自己的属性和方法. 其中jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作. 1.html属性操作 是对htm ...

  6. 在Eclipse安装Genymotion插件的经验心得

    个人心得分享,不当之处还请指正. Eclipse自带的Android模拟器已经无力吐槽了,新手刚上手时或许配置完环境已经精疲力尽了,或许还沉浸在开发成功的喜悦当中,对AVD模拟器的运行情况关注不大,渐 ...

  7. SpringBoot-mvn插件

    在maven projects中有一组springboot的插件 六个选择: 0.build-info:Generate a build-info.properties file based the ...

  8. 使用 profile 进行python代码性能分析

    定位程序性能瓶颈 对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,c ...

  9. 有关在新版mac上 git 环境变量的配置问题

    前段时间买的新版 mpb ,各种环境什么都没有配置,想着在网上边搜边摸索着将各种开发工具逐步配置齐全,各种问题不断出现,不知道是不是新版的原因不兼容. 其中 git 的配置尤为奇怪.在git官网上直接 ...

  10. bit byte 字 字节 关系 简列

    字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte = 16bit) 1字节=8比特(1 byte = 8bit) 1比特=1位 一个字的字长为1 ...