Ejemplo n.º 1
0
        /// <summary>
        /// 生成数据库连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        public string GenerateDBConStr(DatabaseConfig config, DBVisitType visitType)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            string conStr;

            switch (config.DBConInfoType)
            {
            case DBConstant.DBCONINFO_TYPE_DEFAULT:
                conStr = this.CreateDBOriginConnectionString(config, visitType);
                break;

            case DBConstant.DBCONINFO_TYPE_STRING:
                conStr = this.CreateDBSpliceConStr(config, visitType);
                break;

            default:
                throw new ArgumentException($"数据库配置项[{config.ConName}]数据库连接信息类型值[{config.DBConInfoType}]无效;可选值[0:内部拼接数据库连接字符串;1:直接使用字符串]");
            }

            return(conStr);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 释放数据库访问连接对象
 /// </summary>
 /// <param name="con">数据库访问连接对象</param>
 /// <param name="visitType">数据库访问类型</param>
 internal void ReleaseDbConnection(DbConnection con, DBVisitType visitType)
 {
     if (visitType == DBVisitType.R)
     {
         if (this._config.ReadConCount < DBConstant.ReadConCount)
         {
             con.Close();
         }
         else
         {
             this._readConPool.Add(con);
         }
     }
     else if (visitType == DBVisitType.W)
     {
         if (this._config.WriteConCount < DBConstant.WriteConCount)
         {
             con.Close();
         }
         else
         {
             this._writeConPool.Add(con);
         }
     }
     else
     {
         throw new NotSupportedException(string.Format("不支持的访问类型:{0}", visitType.ToString()));
     }
 }
 /// <summary>
 /// ExecuteScalar执行SQL语句,返回执行结果的第一行第一列;
 /// </summary>
 /// <param name="sqlStr">sql语句</param>
 /// <param name="visitType">数据库访问类型</param>
 /// <param name="parameterNameValueDic">参数名名称及对应的值字典集合[key:参数名称,含参数符号;value:参数值]</param>
 /// <returns>返回执行结果</returns>
 protected object PrimitiveExecuteScalar(string sqlStr, DBVisitType visitType, Dictionary <string, object> parameterNameValueDic = null)
 {
     using (var conInfo = new DbConnectionInfo(this._dbid, visitType))
     {
         return(this.PrimitiveExecuteScalar(conInfo.DbConnection, sqlStr, parameterNameValueDic));
     }
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="dbid">数据库编号ID</param>
 /// <param name="visitType">数据库访问类型</param>
 public DbConnectionInfo(int dbid, DBVisitType visitType)
 {
     this.DBID              = dbid;
     this.VisitType         = visitType;
     this._dbConnectionPool = DbConnectionPoolManager.GetConnectionPoolByDBID(dbid);
     this.DbConnection      = this._dbConnectionPool.GetDbConnection(visitType);
 }
Ejemplo n.º 5
0
 /// <summary>
 /// ExecuteNonQuery执行SQL语句,返回受影响的行数
 /// </summary>
 /// <param name="sqlStr">sql语句</param>
 /// <param name="visitType">数据库访问类型</param>
 /// <param name="parameterNameValueDic">参数名名称及对应的值字典集合[key:参数名称,含参数符号;value:参数值]</param>
 /// <returns>返回执行结果</returns>
 public int ExecuteNonQuery(string sqlStr, DBVisitType visitType, Dictionary <string, object> parameterNameValueDic = null)
 {
     using (var connectionInfo = new DbConnectionInfo(this._dbid, Model.DBVisitType.R))
     {
         return(this.PrimitiveExecuteNonQuery(connectionInfo.DbConnection, sqlStr, parameterNameValueDic));
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// 创建数据库拼接连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        protected override string CreateDBSpliceConStr(DatabaseConfig config, DBVisitType visitType)
        {
            //SqlConnectionStringBuilder
            if (config.Port == 0)
            {
                config.Port = 1433;
            }

            return(string.Format(@"data source={0},{1};initial catalog={2};user id={3};password={4}", config.Host, config.Port, config.DatabaseName, config.Account, config.Password));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 创建数据库拼接连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        protected override string CreateDBSpliceConStr(DatabaseConfig config, DBVisitType visitType)
        {
            //NpgsqlConnectionStringBuilder
            if (config.Port == 0)
            {
                config.Port = 5432;
            }

            //return $@"Port={config.Port};Host={config.Host};Username={config.Account};Password={config.Password};Database={config.DatabaseName}";
            return($@"Server={config.Host};Port={config.Port};User ID={config.Account};Password={config.Password};Database={config.DatabaseName}");
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 创建数据库拼接连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        protected override string CreateDBSpliceConStr(DatabaseConfig config, DBVisitType visitType)
        {
            //MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();

            if (config.Port == 0)
            {
                config.Port = 3306;
            }

            return(string.Format(@"database={0};data source={1};Port={2};user id={3};password={4}", config.DatabaseName, config.Host, config.Port, config.Account, config.Password));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 获取数据库访问连接对象
        /// </summary>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库访问连接对象</returns>
        internal DbConnection GetDbConnection(DBVisitType visitType)
        {
            DbConnection con = null;

            switch (visitType)
            {
            case DBVisitType.R:
                if (this._config.ReadConCount < DBConstant.ReadConCount)
                {
                    con = this.CreateConnection(this._config, this._readConStr);
                }
                else
                {
                    if (!this._readConPool.TryTake(out con, this._config.GetConTimeout))
                    {
                        throw new ApplicationException("从连接池获取读连接超时");
                    }
                }
                break;

            case DBVisitType.W:
                if (this._config.WriteConCount < DBConstant.WriteConCount)
                {
                    con = this.CreateConnection(this._config, this._writeConStr);
                }
                else
                {
                    if (!this._writeConPool.TryTake(out con, this._config.GetConTimeout))
                    {
                        throw new ApplicationException("从连接池获取写连接超时");
                    }
                }
                break;

            default:
                throw new NotSupportedException(string.Format("不支持的访问类型:{0}", visitType.ToString()));
            }

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
            }
            catch (Exception ex)
            {
                this.ReleaseDbConnection(con, visitType);
                throw new ApplicationException("打开数据库连接异常", ex);
            }

            return(con);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 创建数据库拼接连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        protected override string CreateDBSpliceConStr(DatabaseConfig config, DBVisitType visitType)
        {
            var scsb = new SQLiteConnectionStringBuilder();

            scsb.Pooling    = true;
            scsb.DataSource = DirectoryInfoEx.GetFullPath(config.DatabaseName);
            if (!string.IsNullOrEmpty(config.Password))
            {
                scsb.Password = config.Password;
            }

            return(this.CreateSQLiteDBConStr(scsb));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 创建数据库拼接连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        protected override string CreateDBSpliceConStr(DatabaseConfig config, DBVisitType visitType)
        {
            //OracleConnectionStringBuilder
            if (config.Port == 0)
            {
                config.Port = 1521;
            }

            //注:不同版本的Oracle.ManagedDataAccess.dll,连接字符串不一定兼容,以下只启用支持的版本
            //return string.Format(@"User Id={0};Password={1};Data Source={2}:{3}/{4}", config.Account, config.Password, config.Host, config.Port, config.DatabaseName);
            //return string.Format(@"User Id={0};Password={1};Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={2})(PORT={3})))(CONNECT_DATA=(SERVICE_NAME={4})))",
            //config.Account, config.Password, config.Host, config.Port, config.DatabaseName);
            return($@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={config.Host})(PORT={config.Port}))(CONNECT_DATA=(SID={config.DatabaseName})));User Id={config.Account};Password={config.Password}");
        }
Ejemplo n.º 12
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="dbid">数据库ID</param>
 /// <param name="visitType">数据库访问类型</param>
 public TestContext(int dbid, DBVisitType visitType) :
     base(dbid, visitType, null)
 {
 }
Ejemplo n.º 13
0
        /// <summary>
        /// 创建原生连接字符串
        /// </summary>
        /// <param name="config">数据库配置</param>
        /// <param name="visitType">数据库访问类型</param>
        /// <returns>数据库连接字符串</returns>
        protected override string CreateDBOriginConnectionString(DatabaseConfig config, DBVisitType visitType)
        {
            var scsb = new SQLiteConnectionStringBuilder(config.ConStr);

            return(this.CreateSQLiteDBConStr(scsb));
        }
Ejemplo n.º 14
0
 /// <summary>
 /// 创建原生连接字符串
 /// </summary>
 /// <param name="config">数据库配置</param>
 /// <param name="visitType">数据库访问类型</param>
 /// <returns>数据库连接字符串</returns>
 protected virtual string CreateDBOriginConnectionString(DatabaseConfig config, DBVisitType visitType)
 {
     return(config.ConStr);
 }
Ejemplo n.º 15
0
 /// <summary>
 /// 创建数据库拼接连接字符串
 /// </summary>
 /// <param name="config">数据库配置</param>
 /// <param name="visitType">数据库访问类型</param>
 /// <returns>数据库连接字符串</returns>
 protected abstract string CreateDBSpliceConStr(DatabaseConfig config, DBVisitType visitType);
Ejemplo n.º 16
0
 /// <summary>
 /// 创建EF上下文接口
 /// </summary>
 /// <param name="visitType">数据库访问类型</param>
 /// <param name="customRegisteEntityTypeFunc">自定义注册EF实体类型回调,已自定义注册实体返回true;否则返回false</param>
 /// <returns>IEFDbContext</returns>
 public IEFDbContext CreateEFDbContext(DBVisitType visitType, Func <DatabaseConfig, DbModelBuilder, bool> customRegisteEntityTypeFunc)
 {
     return(new EFDbContext(new DbConnectionInfo(this._dbid, visitType), customRegisteEntityTypeFunc));
 }
Ejemplo n.º 17
0
 /// <summary>
 /// 创建数据库接连对象
 /// </summary>
 /// <param name="visitType">数据库访问类型</param>
 /// <returns>数据库接连对象</returns>
 public IDbConnectionInfo CreateConnection(DBVisitType visitType)
 {
     return(new DbConnectionInfo(this._dbid, visitType));
 }
Ejemplo n.º 18
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="dbid">数据库ID</param>
 /// <param name="visitType">数据库访问类型</param>
 /// <param name="customRegisteEntityTypeFunc">自定义注册EF实体类型回调,已自定义注册实体返回true;否则返回false</param>
 public EFDbContext(int dbid, DBVisitType visitType, Func <DatabaseConfig, DbModelBuilder, bool> customRegisteEntityTypeFunc)
     : this(new UtilZ.Dotnet.DBIBase.Connection.DbConnectionInfo(dbid, visitType), customRegisteEntityTypeFunc)
 {
 }