GetProviderType() 공개 정적인 메소드

从提供者和连接字符串猜测数据库处理器
public static GetProviderType ( String connStr, String provider ) : Type
connStr String
provider String
리턴 Type
예제 #1
0
파일: DAL.cs 프로젝트: eboxmaker/X
        /// <summary>添加连接字符串</summary>
        /// <param name="connName">连接名</param>
        /// <param name="connStr">连接字符串</param>
        /// <param name="type">实现了IDatabase接口的数据库类型</param>
        /// <param name="provider">数据库提供者,如果没有指定数据库类型,则有提供者判断使用哪一种内置类型</param>
        public static void AddConnStr(String connName, String connStr, Type type, String provider)
        {
            if (String.IsNullOrEmpty(connName))
            {
                throw new ArgumentNullException("connName");
            }
            //2016.01.04 @宁波-小董,加锁解决大量分表分库多线程带来的提供者无法识别错误
            lock (lockObj)
            {
                if (type == null)
                {
                    type = DbFactory.GetProviderType(connStr, provider);
                }

                // 允许后来者覆盖前面设置过了的
                //var set = new ConnectionStringSettings(connName, connStr, provider);
                ConnStrs[connName]   = connStr;
                _connTypes[connName] = type ?? throw new XCodeException("无法识别{0}的提供者{1}!", connName, provider);
            }
        }
예제 #2
0
        /// <summary>添加连接字符串</summary>
        /// <param name="connName">连接名</param>
        /// <param name="connStr">连接字符串</param>
        /// <param name="type">实现了IDatabase接口的数据库类型</param>
        /// <param name="provider">数据库提供者,如果没有指定数据库类型,则有提供者判断使用哪一种内置类型</param>
        public static void AddConnStr(String connName, String connStr, Type type, String provider)
        {
            if (connName.IsNullOrEmpty())
            {
                throw new ArgumentNullException(nameof(connName));
            }
            if (connStr.IsNullOrEmpty())
            {
                return;
            }

            //2016.01.04 @宁波-小董,加锁解决大量分表分库多线程带来的提供者无法识别错误
            lock (_connTypes)
            {
                if (!ConnStrs.TryGetValue(connName, out var oldConnStr))
                {
                    oldConnStr = null;
                }

                if (type == null)
                {
                    type = DbFactory.GetProviderType(connStr, provider);
                }

                // 允许后来者覆盖前面设置过了的
                //var set = new ConnectionStringSettings(connName, connStr, provider);
                ConnStrs[connName]   = connStr;
                _connTypes[connName] = type ?? throw new XCodeException("无法识别{0}的提供者{1}!", connName, provider);

                // 如果连接字符串改变,则重置所有
                if (!oldConnStr.IsNullOrEmpty() && !oldConnStr.EqualIgnoreCase(connStr))
                {
                    WriteLog("[{0}]的连接字符串改变,准备重置!", connName);

                    var dal = Create(connName);
                    dal._ConnStr = connStr;
                    dal.Reset();
                }
            }
        }
예제 #3
0
        /// <summary>添加连接字符串</summary>
        /// <param name="connName">连接名</param>
        /// <param name="connStr">连接字符串</param>
        /// <param name="type">实现了IDatabase接口的数据库类型</param>
        /// <param name="provider">数据库提供者,如果没有指定数据库类型,则有提供者判断使用哪一种内置类型</param>
        public static void AddConnStr(String connName, String connStr, Type type, String provider)
        {
            if (String.IsNullOrEmpty(connName))
            {
                throw new ArgumentNullException("connName");
            }

            if (type == null)
            {
                type = DbFactory.GetProviderType(connStr, provider);
            }
            if (type == null)
            {
                throw new XCodeException("无法识别的提供者" + provider + "!");
            }

            // 允许后来者覆盖前面设置过了的
            ConnectionStringSettings set = new ConnectionStringSettings(connName, connStr, provider);

            ConnStrs[connName]   = set;
            _connTypes[connName] = type;
        }