using System; using System.Collections.Generic; using System.Text; using System.Configuration; using System.Data.Common; using Ant.Common; using MySql.Data.MySqlClient; namespace Ant.Data { /// /// 数据库访问工厂类 /// public class DataAccessFactory { #region 创建不同数据连接 /// /// 创建不同数据连接 /// /// 模块 /// 数据方式 /// public static DataAccess CreateDataConnection(string ModuleName, DataConfigEnum data = DataConfigEnum.WriteData) { DataAccess db = null; var datalist = DataConfig.GetDataConfig(); if (string.Compare(ModuleName, "default", true) == 0) { ModuleName = DatabaseDefault; } if (ModuleName.IsEmpty()) ModuleName = ConfigurationManager.AppSettings["Default"]; var dataconfig = datalist[ModuleName]; string key = DecodeEncrypt.Decrypt(dataconfig.DatabaseKey);//解密 string doc = DecodeEncrypt.Decode(key);//解密 string strconnection = ""; if (string.Compare(dataconfig.IsConStringEncrypt, "true", true) == 0) { //需要对数据库连接进行解密 } if (!Environment.MachineName.IsEmpty()) { } strconnection = (data == DataConfigEnum.ReadData) ? dataconfig.ReadData : dataconfig.WriteData;//默认连接数据库 if (strconnection.IsIndexOf(doc) || dataconfig.DatabaseType.Equals(DatabaseType.SQLite.ToString(), StringComparison.CurrentCultureIgnoreCase)) { DatabaseProperty config = new DatabaseProperty(); config.ConnectionString = strconnection; config.DatabaseType = GetDatabaseType(dataconfig.DatabaseType); db = CreateDataAccess(config);//根据模块来创建不同数据库连接,没有模块就创建默认的数据连接 } else { db = null; } return db; } /// /// 获取默认写库配置 /// public static DataAccess GetWriteDataDefault { get { return CreateDataConnection(DatabaseDefault, DataConfigEnum.WriteData); } } /// /// 获取默认写库配置 /// public static DataAccess GetReadDataDefault { get { return CreateDataConnection(DatabaseDefault, DataConfigEnum.ReadData); } } #endregion /// /// 创建数据库边连接字符串 /// /// /// public static string CreateDbParmCharacter(DatabaseProperty dbp) { string character = string.Empty; switch (dbp.DatabaseType) { case DatabaseType.MSSQLServer: character = "@"; break; case DatabaseType.Oracle: character = ":"; break; case DatabaseType.MySQL: character = "?"; break; case DatabaseType.OleDb: character = "@"; break; case DatabaseType.SQLite: character = "@"; break; default: throw new Exception("数据库类型目前不支持!"); } return character; } /// /// 创建一个数据库访问类 /// /// /// private static DataAccess CreateDataAccess(DatabaseProperty dbp) { DataAccess da = null; switch (dbp.DatabaseType) { case DatabaseType.MSSQLServer: da = new MSSqlDataAccess(dbp.ConnectionString); break; case DatabaseType.OleDb: da = new OleDbDataAccess(dbp.ConnectionString); break; case DatabaseType.Oracle: da = new OracleDataAccess(dbp.ConnectionString); break; case DatabaseType.MySQL: da = new MySqlDataAccess(dbp.ConnectionString); break; case DatabaseType.SQLite: da = new SQLiteDataAccess(dbp.ConnectionString); break; default: da = new MSSqlDataAccess(dbp.ConnectionString); break; } return da; } //public static DbParameter CreateDbParameter() //{ // //switch (DbHelper.DbType) // //{ // // case DatabaseType.Oracle: // // return new OracleParameter(); // // case DatabaseType.SqlServer: // // return new SqlParameter(); // // case DatabaseType.Access: // // return new OleDbParameter(); // // case DatabaseType.MySql: // // return new MySqlParameter(); // // case DatabaseType.SQLite: // // return new SQLiteParameter(); // //} // throw new Exception("数据库类型目前不支持!"); //} /// /// 获取数据库类型 /// /// /// public static DatabaseType GetDatabaseType(string configName) { switch (configName.ToLower()) { case "mssql": return DatabaseType.MSSQLServer; case "oledb": return DatabaseType.OleDb; case "oracle": return DatabaseType.Oracle; case "mysql": return DatabaseType.MySQL; case "sqlite": return DatabaseType.SQLite; default: return DatabaseType.MSSQLServer; } } /// /// 默认数据库 /// public static string DatabaseDefault { get { return ConfigurationManager.AppSettings["Default"].ToString(); } } /// /// 获取数据库类型 /// /// /// public static DatabaseType GetDatabaseType() { return GetDatabaseType("Default"); } } }