using System; using System.Text; namespace CSFramework.DB { /// /// 数据库对象工厂 /// public static class DatabaseFactory { /// /// 执行SQL命令超时时间,单位:秒。当未设置此参数(默认0),DbCommand默认TimeOut值,30秒。 /// public static int CommandTimeOut { get; set; } = 30; /// /// 连接数据库服务器超时时间,单位:秒。当未设置此参数(默认0),DbConnection默认TimeOut值,15秒。 /// public static int ConnectionTimeOut { get; set; } = 15; /// /// 创建数据库(使用DataProviderFactory创建数据存取基础组件,通用版) /// /// 数据库类型 /// 数据库连接字符串 /// public static IDatabase CreateMDB(DatabaseType providerType, string connectionString) { SetTimeOut(ref connectionString, ConnectionTimeOut); return new DatabaseMDB(providerType, connectionString); } /// /// 创建SQL Server数据库 /// /// 数据库连接字符串 /// public static IDatabase CreateSqlDatabase(string connectionString) { SetTimeOut(ref connectionString, ConnectionTimeOut); return new DatabaseMSSQL(connectionString); } /// /// 创建MySQL数据库 /// /// 数据库连接字符串 /// public static IDatabase CreateMySqlDatabase(string connectionString) { SetTimeOut(ref connectionString, ConnectionTimeOut); return new DatabaseMySQL(connectionString); } /// /// 创建Oracle数据库 /// /// 数据库连接字符串 /// public static IDatabase CreateOracleDatabase(string connectionString) { return new DatabaseOracle(connectionString); } /// /// 创建数据库 /// /// 数据库类型 /// 数据库连接字符串 /// public static IDatabase CreateDatabase(DatabaseType dbType, string connectionString) { if (dbType == DatabaseType.SqlServer) { SetTimeOut(ref connectionString, ConnectionTimeOut); return new DatabaseMSSQL(connectionString); } if (dbType == DatabaseType.MySQL) { SetTimeOut(ref connectionString, ConnectionTimeOut); return new DatabaseMySQL(connectionString); } if (dbType == DatabaseType.Oracle) return new DatabaseOracle(connectionString); throw new Exception("未支持的数据库类型!"); } /// /// 创建数据库 /// /// 数据库类型 /// 数据库连接字符串 /// public static IDatabase CreateDatabase(string dbType, string connectionString) { SetTimeOut(ref connectionString, ConnectionTimeOut); DatabaseType databaseType; if (!Enum.TryParse(dbType, true, out databaseType)) throw new Exception("不支持的数据库类型!"); if (databaseType == DatabaseType.SqlServer) return new DatabaseMSSQL(connectionString); if (databaseType == DatabaseType.MySQL) return new DatabaseMySQL(connectionString); if (databaseType == DatabaseType.Oracle) return new DatabaseOracle(connectionString); throw new Exception("未支持的数据库类型!"); } /// /// ADO组件工厂 /// /// 数据库类型 /// 数据连接字符串 /// public static IAdoFactory GetADOFactory(DatabaseType dbType, string connectionString) { SetTimeOut(ref connectionString, ConnectionTimeOut); return CreateDatabase(dbType, connectionString); } /// /// 更改连接字符串的超时时间(适用MsSQL,MySQL) /// /// 连接字符串 /// 超时时间,秒 internal static void SetTimeOut(ref string sConn, int TIME_OUT) { //连接字符串没有定义Connection TimeOut if (sConn.ToLower().IndexOf("Connection TimeOut".ToLower(), 0) <= 0) { sConn = sConn + ";Connection TimeOut=" + TIME_OUT.ToString() + ";"; } else { //分隔 var items = sConn.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); //string item = items.Where(e => e.ToLower().IndexOf("Connection TimeOut".ToLower(), 0) >= 0).FirstOrDefault(); for (var i = 0; i <= items.Length - 1; i++) { var s = items[i]; //;Connection TimeOut={4}; if (s.ToLower() .IndexOf("Connection TimeOut".ToLower(), 0) >= 0) { var t = s.Split('='); items[i] = "Connection TimeOut=" + TIME_OUT.ToString(); } } var sb = new StringBuilder(); foreach (var s in items) sb.Append(s + ";"); sConn = sb.ToString(); } } } }