【项目总结二】重构服务器

####原始框架
服务器和客户端C++开发,桌面版客户端,每次都要配置多个服务器,每个模块一个服务器
####修改
一个主服务器+多个计算服务器,所有客户端连接主服务器,主服务连接各个计算服务器,主服务器管理一些基础数据,计算服务器管理自己模块。可扩展、易配置
####数据库
SQLite、Access、SQLServer
这里写图片描述
Command类调用管理类
DataAccess统一管理 管理类 适配器模式
管理类全部继承DBOperateBase类(把BaseSQL和DataBase联系起来)
DBSQLite 继承IDatabase
SQLiteSQL 继承至BaseSQL

public DBOperateBase(IDataBase database, BaseSQL baseSQL)
{
            m_database = database;
            m_baseSQL = baseSQL;
}
public class ClassManager : DBOperateBase
{
        public ClassManager(IDataBase database, BaseSQL baseSQL, UInt32 nProjectID, UInt32 nPartID)
            : base(database, baseSQL)
        {
            SetProjectID(nProjectID);
            SetPartID(nPartID);
        }
}
public interface IDataBase
{
        /// <summary>
        /// 数据库类型
        /// </summary>
        /// <returns></returns>
        DBType GetDBType();

        /// <summary>
        /// 执行SQL语句返回记录集
        /// </summary>
        /// <param name="sqlString">SQL语句</param>
        /// <returns>数据集</returns>
        DataSet GetDataSet(string strSQL);

        /// <summary>
        /// 执行SQL语句返回记录读取器
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        DbDataReader ExecuteReader(string strSQL);

        /// <summary>
        /// 执行SQL语句
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        int ExecuteNonQuery(string strSQL);

        /// <summary>
        /// 执行SQL返回首行首列
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        int ExecuteScalar(string strSQL);

        /// <summary>
        /// 关闭数据库
        /// </summary>
        void Close();

        /// <summary>
        /// 插入记录
        /// </summary>
        /// <param name="rs">记录</param>
        /// <param name="bQueryID">是否返回插入后ID</param>
        /// <returns></returns>
        object InsertRecord(DBRecordset rs, bool bQueryID = false);

        /// <summary>
        /// 更新记录
        /// </summary>
        /// <param name="rs">记录</param>
        /// <param name="strCondition">查询条件</param>
        void UpdateRecord(DBRecordset rs, string strCondition);
        
        /// <summary>
        /// 创建表
        /// </summary>
        /// <param name="table"></param>
        void CreateTable(DBTable table);

        /// <summary>
        /// 删除表
        /// </summary>
        /// <param name="strTable">表名</param>
        void DropTable(string strTable);

        /// <summary>
        /// 创建索引
        /// </summary>
        void CreateIndex(string strTable, string strFields, string strIndexName = null);

        void CreateUniqueIndex(string strTable, string strFields, string strIndexName = null);

        /// <summary>
        /// 开始事务
        /// </summary>
        void BeginTrans();

        /// <summary>
        /// 提交事务
        /// </summary>
        void CommitTrans();
        
        /// <summary>
        /// 回滚事务
        /// </summary>
        void RollbackTrans();

        /// <summary>
        /// 获取数据库表名列表
        /// </summary>
        /// <returns></returns>
        List<string> GetTableNameList();

        /// <summary>
        /// 获取表字段名列表
        /// </summary>
        /// <param name="strTableName">表名</param>
        /// <returns></returns>
        List<string> GetTableFieldNameList(string strTableName);

        /// <summary>
        /// 取得字段最大ID
        /// </summary>
        /// <param name="strFieldName">字段</param>
        /// <param name="strTableName">表名</param>
        /// <returns></returns>
        UInt32 GetMaxID(string strFieldName, string strTableName);

        /// <summary>
        /// 表是否存在
        /// </summary>
        /// <param name="strTableName">表名</param>
        /// <returns></returns>
        bool IsTableExisted(string strTableName);


        /// <summary>
        /// 字段是否存在
        /// </summary>
        /// <param name="strTableName">表名</param>
        /// <param name="strField">字段名</param>
        /// <returns></returns>
        bool IsFieldExisted(string strTableName, string strFieldName);
}

####ServerBase包
服务器继承ServerBase的AsyncServer服务器 读取配置, 启动,监听,
CmmSever重写 DoCommnd,进入到CommandHandler
New 一下 DataAccess,每一个构造函数会读取全局下的变量,选择对应的数据库ID
(哪一个数据库不仅仅是哪一种数据库,同时可以兼容多个数据库),ID在Packet传过来

frmServer==>CmmServer:AsyncServer==>CommandHandler(解析包并输出包)==>Command
这里写图片描述
####BaseLib包
这里写图片描述

public DBSQLServer(DBConfig config)
{
		string strConn = "Data Source=" + config.Server + ";Password=" + config.Password + ";User ID=" + config.User + ";Initial Catalog=" + config.DBName;

		try
		{
                m_Conn = new SqlConnection(strConn);
                m_Conn.Open();
        }
		catch (Exception e)
		{
			throw new Exception("数据库链接错误:" + e.Message);
		}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值