/// <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); }
/// <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); }
/// <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)); } }
/// <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); } }
public MySqlDBAccess(IDBInteraction dbInteraction, DatabaseConfig config, string databaseTypeName) : base(dbInteraction, config, databaseTypeName, SQL_MAX_LENGTH) { }