Ejemplo n.º 1
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="dbInteraction">数据库交互对象</param>
        /// <param name="config">数据库配置</param>
        /// <param name="databaseTypeName">数据库类型名称</param>
        /// <param name="sqlMaxLength">sql语句最大长度</param>
        public DBAccessAbs(IDBInteraction dbInteraction, DatabaseConfig config, string databaseTypeName, long sqlMaxLength)
        {
            this._dbid             = config.DBID;
            this._config           = config;
            this._dbInteraction    = dbInteraction;
            this._databaseTypeName = databaseTypeName;
            if (config.SqlMaxLength == DBConstant.SqlMaxLength)
            {
                this._sqlMaxLength = sqlMaxLength;
            }
            else
            {
                this._sqlMaxLength = config.SqlMaxLength;
            }

            DbConnectionPoolManager.AddDbConnectionPool(config, dbInteraction);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 根据DBID获取数据库访问连接池对象
        /// </summary>
        /// <param name="dbid">数据库编号ID</param>
        /// <returns>数据库访问连接对象</returns>
        internal static DbConnectionPool GetConnectionPoolByDBID(int dbid)
        {
            DbConnectionPool dbConnectionPool;

            if (!_dbConnectionPoolDic.TryGetValue(dbid, out dbConnectionPool))
            {
                var            config        = DatabaseConfigManager.GetConfig(dbid);
                IDBFactory     dbFactory     = DBFactoryManager.GetDBFactory(config);
                IDBInteraction dbInteraction = dbFactory.GetDBInteraction();
                AddDbConnectionPool(config, dbInteraction);

                if (!_dbConnectionPoolDic.TryGetValue(dbid, out dbConnectionPool))
                {
                    throw new ApplicationException(string.Format("连接池中不包含数据库编号ID为:{0}的连接信息", dbid));
                }
            }

            return(dbConnectionPool);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="interaction">数据库交互实例</param>
        public DbConnectionPool(DatabaseConfig config, IDBInteraction interaction)
        {
            this._config      = config;
            this._interaction = interaction;

            this._readConPool  = new BlockingCollection <DbConnection>(new ConcurrentStack <DbConnection>());
            this._writeConPool = new BlockingCollection <DbConnection>(new ConcurrentStack <DbConnection>());

            this._readConStr = this._interaction.GenerateDBConStr(config, DBVisitType.R);
            for (int i = 0; i < config.ReadConCount; i++)
            {
                this._readConPool.Add(this.CreateConnection(config, this._readConStr));
            }

            this._writeConStr = this._interaction.GenerateDBConStr(config, DBVisitType.W);
            for (int i = 0; i < config.WriteConCount; i++)
            {
                this._writeConPool.Add(this.CreateConnection(config, this._writeConStr));
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 添加数据库连接池
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="dbInteraction">数据库交互实例</param>
        internal static void AddDbConnectionPool(DatabaseConfig config, IDBInteraction dbInteraction)
        {
            int dbid = config.DBID;

            lock (_dbConnectionPoolDicMonitor)
            {
                if (!_status)
                {
                    throw new ApplicationException("连接池已释放");
                }

                if (_dbConnectionPoolDic.ContainsKey(dbid))
                {
                    //连接池已经创建,不再重复创建,直接返回
                    return;
                }

                var dbConnectionPool = new DbConnectionPool(config, dbInteraction);
                _dbConnectionPoolDic.TryAdd(dbid, dbConnectionPool);
            }
        }
Ejemplo n.º 5
0
 public MySqlDBAccess(IDBInteraction dbInteraction, DatabaseConfig config, string databaseTypeName)
     : base(dbInteraction, config, databaseTypeName, SQL_MAX_LENGTH)
 {
 }