/// <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); } }
/// <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(); } } }
/// <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; }