/// <summary> /// 获取数据库连接字符串 /// </summary> /// <param name="dbLinkArgs">连接对象</param> /// <returns></returns> public static string GetDbLinkArgsConnStr(DbLinkArgs dbLinkArgs) { if (dbLinkArgs == null) { return(string.Empty); } return(string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3};Pooling=true;MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30", dbLinkArgs.DataSource.ObjToStr(), dbLinkArgs.DbName.ObjToStr(), dbLinkArgs.UserId.ObjToStr(), dbLinkArgs.Pwd.ObjToStr())); }
/// <summary> /// 获取模块表名,支持跨库 /// </summary> /// <param name="modelType">实体类型对象</param> /// <param name="currTempDblinkArgs">当前连接对象,默认为本地连接</param> /// <returns></returns> public static string GetModuleTableName(Type modelType, DbLinkArgs currTempDblinkArgs = null) { string dbType = string.Empty; //额外配置的连接字符串 string connString = GetModelConnString(modelType, out dbType); if (string.IsNullOrWhiteSpace(dbType)) { dbType = "0"; } DatabaseType dbTypeEnum = DatabaseType.MsSqlServer; try { dbTypeEnum = (DatabaseType)Enum.Parse(typeof(DatabaseType), dbType); } catch { } //额外数据库连接对象 DbLinkArgs dblinkArgs = GetDbLinkArgs(connString, dbTypeEnum); if (dblinkArgs != null) { //本地连接字符串 string currConnString = WebConfigHelper.GetConnectionString("DbReadConnString"); string currDbTypeStr = WebConfigHelper.GetAppSettingValue("DbType"); if (string.IsNullOrEmpty(currDbTypeStr)) { currDbTypeStr = "0"; } DatabaseType currDbType = DatabaseType.MsSqlServer; try { currDbType = (DatabaseType)Enum.Parse(typeof(DatabaseType), currDbTypeStr); } catch { } //本地连接对象 DbLinkArgs currDblinkArgs = currTempDblinkArgs != null ? currTempDblinkArgs : GetDbLinkArgs(currConnString, currDbType); if (dblinkArgs.DataSource == currDblinkArgs.DataSource || dblinkArgs.DataSource == "." || dblinkArgs.DataSource == "(local)") //服务器相同或本地服务器 { if (dblinkArgs.DbName != currDblinkArgs.DbName) //跨库不跨服务器 { return(string.Format("[{0}].[dbo].[{1}]", dblinkArgs.DbName, modelType.Name)); } } else //跨服务器 { return(string.Format("[{0}].[{1}].[dbo].[{2}]", dblinkArgs.DataSource, dblinkArgs.DbName, modelType.Name)); } } return(modelType.Name); }
/// <summary> /// 获取模块表名,支持跨库 /// </summary> /// <param name="modelType">实体类型对象</param> /// <param name="currTempDblinkArgs">当前连接对象,默认为本地连接</param> /// <returns></returns> public static string GetModuleTableName(Type modelType, DbLinkArgs currTempDblinkArgs = null) { string dbType = string.Empty; string connString = GetModelConnString(modelType, out dbType); if (string.IsNullOrWhiteSpace(dbType)) { dbType = "0"; } DatabaseType dbTypeEnum = DatabaseType.MsSqlServer; try { dbTypeEnum = (DatabaseType)Enum.Parse(typeof(DatabaseType), dbType); } catch { } return(GetCrossTableName(modelType.Name, dbTypeEnum, connString, currTempDblinkArgs)); }
/// <summary> /// 模块数据库是否是跨服务器 /// </summary> /// <param name="modelType">实体类型</param> /// <returns></returns> public static bool IsCrossServer(Type modelType) { string dbType = string.Empty; //额外配置的连接字符串 string connString = GetModelConnString(modelType, out dbType); if (string.IsNullOrWhiteSpace(dbType)) { dbType = "0"; } DatabaseType dbTypeEnum = DatabaseType.MsSqlServer; try { dbTypeEnum = (DatabaseType)Enum.Parse(typeof(DatabaseType), dbType); } catch { } //额外数据库连接对象 DbLinkArgs dblinkArgs = GetDbLinkArgs(connString, dbTypeEnum); if (dblinkArgs != null) { //本地连接字符串 string currConnString = WebConfigHelper.GetConnectionString("DbReadConnString"); string currDbTypeStr = WebConfigHelper.GetAppSettingValue("DbType"); if (string.IsNullOrEmpty(currDbTypeStr)) { currDbTypeStr = "0"; } DatabaseType currDbType = DatabaseType.MsSqlServer; try { currDbType = (DatabaseType)Enum.Parse(typeof(DatabaseType), currDbTypeStr); } catch { } //本地连接对象 DbLinkArgs currDblinkArgs = GetDbLinkArgs(currConnString, currDbType); if (dblinkArgs.DataSource != currDblinkArgs.DataSource) //服务器不相同 { return(true); } } return(false); }
/// <summary> /// 获取本地数据库连接对象 /// </summary> /// <returns></returns> public static DbLinkArgs GetLocalDbLinkArgs() { string currConnString = WebConfigHelper.GetConnectionString("DbReadConnString"); string currDbTypeStr = WebConfigHelper.GetAppSettingValue("DbType"); if (string.IsNullOrEmpty(currDbTypeStr)) { currDbTypeStr = "0"; } DatabaseType currDbType = DatabaseType.MsSqlServer; try { currDbType = (DatabaseType)Enum.Parse(typeof(DatabaseType), currDbTypeStr); } catch { } //本地连接对象 DbLinkArgs currDblinkArgs = GetDbLinkArgs(currConnString, currDbType); return(currDblinkArgs); }
/// <summary> /// 获取跨服务器的连接参数集合 /// </summary> /// <param name="isCrossServer">是否跨库服务器,不包含服务器相同数据库不同的</param> /// <returns></returns> public static List <DbLinkArgs> GetCrossServerDbLinkArgs(bool isCrossServer = true) { List <DbLinkArgs> list = new List <DbLinkArgs>(); string modelConfigPath = GetModelConfigXml(); string rootNode = "/Root"; XmlNodeList nodeList = XmlHelper.ReadAllChild(modelConfigPath, rootNode); if (nodeList != null && nodeList.Count > 0) { //本地连接对象 DbLinkArgs currDblinkArgs = GetLocalDbLinkArgs(); //取跨服务器的连接对象 for (int i = 0; i < nodeList.Count; i++) { XmlNode node = nodeList[i]; string nodeStr = string.Format("/Root/{0}", node.Name); string tempReadConnStr = XmlHelper.Read(modelConfigPath, nodeStr, "readConnString"); string dbTypeStr = XmlHelper.Read(modelConfigPath, nodeStr, "dbType"); DatabaseType dbTypeEnum = DatabaseType.MsSqlServer; try { dbTypeEnum = (DatabaseType)Enum.Parse(typeof(DatabaseType), dbTypeStr); } catch { } if (!string.IsNullOrEmpty(tempReadConnStr)) { DbLinkArgs linkArgs = GetDbLinkArgs(tempReadConnStr, dbTypeEnum); if (isCrossServer) //只有服务器不相同时才添加 { if (linkArgs.DataSource != currDblinkArgs.DataSource && list.Where(x => x.DataSource == linkArgs.DataSource).FirstOrDefault() == null) { list.Add(linkArgs); } } else //只要是数据库不同就添加 { if (linkArgs.DbName != currDblinkArgs.DbName && list.Where(x => x.DbName == linkArgs.DbName).FirstOrDefault() == null) { list.Add(linkArgs); } } } string tempWriteConnStr = XmlHelper.Read(modelConfigPath, nodeStr, "writeConnString"); if (!string.IsNullOrEmpty(tempWriteConnStr)) { DbLinkArgs linkArgs = GetDbLinkArgs(tempWriteConnStr, dbTypeEnum); if (isCrossServer) { if (linkArgs.DataSource != currDblinkArgs.DataSource && list.Where(x => x.DataSource == linkArgs.DataSource).FirstOrDefault() == null) { list.Add(linkArgs); } } else { if (linkArgs.DbName != currDblinkArgs.DbName && list.Where(x => x.DbName == linkArgs.DbName).FirstOrDefault() == null) { list.Add(linkArgs); } } } } } return(list); }
/// <summary> /// 获取跨库模块的远程连接参数 /// </summary> /// <param name="connString">连接字符串</param> /// <param name="dbType">数据库类型</param> /// <returns></returns> public static DbLinkArgs GetDbLinkArgs(string connString, DatabaseType dbType = DatabaseType.MsSqlServer) { DbLinkArgs dbLinkArgs = null; if (!string.IsNullOrWhiteSpace(connString)) { #region MsSqlServer if (dbType == DatabaseType.MsSqlServer) //sql server数据库 { string[] token = connString.Trim().Split(";".ToCharArray()); if (token != null && token.Length > 0) { string dataSource = string.Empty; string dbName = string.Empty; string uId = string.Empty; string pwd = string.Empty; foreach (string str in token) { if (str.StartsWith("Data Source")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { dataSource = GetDataSource(tempToken[1].Trim(), dbType); } } else if (str.StartsWith("Initial Catalog")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { dbName = tempToken[1].Trim(); } } else if (str.StartsWith("User ID")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { uId = tempToken[1].Trim(); } } else if (str.StartsWith("Password")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { pwd = tempToken[1].Trim(); } } } if (!string.IsNullOrEmpty(dataSource) && !string.IsNullOrEmpty(dbName) && !string.IsNullOrEmpty(uId) && !string.IsNullOrEmpty(pwd)) { dbLinkArgs = new DbLinkArgs(); dbLinkArgs.DataSource = dataSource; dbLinkArgs.DbName = dbName; dbLinkArgs.UserId = uId; dbLinkArgs.Pwd = pwd; dbLinkArgs.DbType = dbType; dbLinkArgs.ConnString = connString; } } } #endregion #region MySql else if (dbType == DatabaseType.MySql) //mysql数据库 { string[] token = connString.Trim().Split(";".ToCharArray()); if (token != null && token.Length > 0) { string dataSource = string.Empty; string dbName = string.Empty; string uId = string.Empty; string pwd = string.Empty; foreach (string str in token) { if (str.StartsWith("Server")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { dataSource = GetDataSource(tempToken[1].Trim(), dbType); } } else if (str.StartsWith("Database")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { dbName = tempToken[1].Trim(); } } else if (str.StartsWith("User")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { uId = tempToken[1].Trim(); } } else if (str.StartsWith("Password")) { string[] tempToken = str.Split("=".ToCharArray()); if (tempToken != null && tempToken.Length == 2) { pwd = tempToken[1].Trim(); } } } if (!string.IsNullOrEmpty(dataSource) && !string.IsNullOrEmpty(dbName) && !string.IsNullOrEmpty(uId) && !string.IsNullOrEmpty(pwd)) { dbLinkArgs = new DbLinkArgs(); dbLinkArgs.DataSource = dataSource; dbLinkArgs.DbName = dbName; dbLinkArgs.UserId = uId; dbLinkArgs.Pwd = pwd; dbLinkArgs.DbType = dbType; dbLinkArgs.ConnString = connString; } } } #endregion } return(dbLinkArgs); }