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. /Date(1410019200000+0800)/如何转换为date对象

    <script type="text/javascript">var s = '/Date(1410019200000+0800)/ '; s.replace(/Dat ...

  2. 成长之路--Docker入门

    简介 Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机. Docker版本 Docker 划分为CE 和EE.CE 即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使 ...

  3. dubbo-admin网页管理控制台

    由于近段时间在看dubbo,网上找到的这个war包发布到tomcat报错,故从git(https://github.com/apache/incubator-dubbo-ops)上重新下载编译了版本 ...

  4. HTML 5中的新特性

    HTML 5中的新特性 html5新增了一些语义化更好的标签元素.首先,让我们来了解一下HTML语义化. 1.什么是HTML语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开 ...

  5. caffe-windows中classification.cpp的源码阅读

    caffe-windows中classification.cpp的源码阅读 命令格式: usage: classification string(模型描述文件net.prototxt) string( ...

  6. iOS内存泄露统计

    1.Value stored to 'xxx' during its initialization is never read // 对象声明之后根本就没有使用 只有赋值 2.Value stored ...

  7. 【Linux】Linux 在线安装yum

    Linux如何安装软件? 一.RPM安装 优点: 安装过程很简单 缺点: 需要自己寻找和系统版本对应的RPM包 安装过程中需要解决包的依赖问题(例如tftp包) 二.yum在线安装 软件包仓库 仓库的 ...

  8. matlab练习程序(演化策略ES)

    还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的. 演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法. 算 ...

  9. 删除排序数组中的重复数字 - C++

    class Solution { public: /** * @param A: a list of integers * @return : return an integer */ int rem ...

  10. 【Hibernate那点事儿】—— Hibernate应该了解的知识

    前言: 最近由于有点时间,就像深入的学习一下Hibernate.之前只是简单的使用,并没领会它的妙处.这里就趁着分享的机会,好好整理一下. 这篇主要讲到了下面几个部分: Hibernate框架 Hib ...