DataAccessFactory.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Configuration;
  5. using System.Data.Common;
  6. using Ant.Common;
  7. using MySql.Data.MySqlClient;
  8. namespace Ant.Data
  9. {
  10. /// <summary>
  11. /// 数据库访问工厂类
  12. /// </summary>
  13. public class DataAccessFactory
  14. {
  15. #region 创建不同数据连接
  16. /// <summary>
  17. /// 创建不同数据连接
  18. /// </summary>
  19. /// <param name="ModuleName">模块</param>
  20. /// <param name="datatype">数据方式</param>
  21. /// <returns></returns>
  22. public static DataAccess CreateDataConnection(string ModuleName, DataConfigEnum data = DataConfigEnum.WriteData)
  23. {
  24. DataAccess db = null; var datalist = DataConfig.GetDataConfig();
  25. if (string.Compare(ModuleName, "default", true) == 0)
  26. {
  27. ModuleName = DatabaseDefault;
  28. }
  29. if (ModuleName.IsEmpty())
  30. ModuleName = ConfigurationManager.AppSettings["Default"];
  31. var dataconfig = datalist[ModuleName];
  32. string key = DecodeEncrypt.Decrypt(dataconfig.DatabaseKey);//解密
  33. string doc = DecodeEncrypt.Decode(key);//解密
  34. string strconnection = "";
  35. if (string.Compare(dataconfig.IsConStringEncrypt, "true", true) == 0)
  36. {
  37. //需要对数据库连接进行解密
  38. }
  39. if (!Environment.MachineName.IsEmpty())
  40. {
  41. }
  42. strconnection = (data == DataConfigEnum.ReadData) ? dataconfig.ReadData : dataconfig.WriteData;//默认连接数据库
  43. if (strconnection.IsIndexOf(doc) || dataconfig.DatabaseType.Equals(DatabaseType.SQLite.ToString(), StringComparison.CurrentCultureIgnoreCase))
  44. {
  45. DatabaseProperty config = new DatabaseProperty();
  46. config.ConnectionString = strconnection;
  47. config.DatabaseType = GetDatabaseType(dataconfig.DatabaseType);
  48. db = CreateDataAccess(config);//根据模块来创建不同数据库连接,没有模块就创建默认的数据连接
  49. }
  50. else
  51. {
  52. db = null;
  53. }
  54. return db;
  55. }
  56. /// <summary>
  57. /// 获取默认写库配置
  58. /// </summary>
  59. public static DataAccess GetWriteDataDefault
  60. {
  61. get { return CreateDataConnection(DatabaseDefault, DataConfigEnum.WriteData); }
  62. }
  63. /// <summary>
  64. /// 获取默认写库配置
  65. /// </summary>
  66. public static DataAccess GetReadDataDefault
  67. {
  68. get { return CreateDataConnection(DatabaseDefault, DataConfigEnum.ReadData); }
  69. }
  70. #endregion
  71. /// <summary>
  72. /// 创建数据库边连接字符串
  73. /// </summary>
  74. /// <param name="dbp"></param>
  75. /// <returns></returns>
  76. public static string CreateDbParmCharacter(DatabaseProperty dbp)
  77. {
  78. string character = string.Empty;
  79. switch (dbp.DatabaseType)
  80. {
  81. case DatabaseType.MSSQLServer:
  82. character = "@";
  83. break;
  84. case DatabaseType.Oracle:
  85. character = ":";
  86. break;
  87. case DatabaseType.MySQL:
  88. character = "?";
  89. break;
  90. case DatabaseType.OleDb:
  91. character = "@";
  92. break;
  93. case DatabaseType.SQLite:
  94. character = "@";
  95. break;
  96. default:
  97. throw new Exception("数据库类型目前不支持!");
  98. }
  99. return character;
  100. }
  101. /// <summary>
  102. /// 创建一个数据库访问类
  103. /// </summary>
  104. /// <param name="dbp"></param>
  105. /// <returns></returns>
  106. private static DataAccess CreateDataAccess(DatabaseProperty dbp)
  107. {
  108. DataAccess da = null;
  109. switch (dbp.DatabaseType)
  110. {
  111. case DatabaseType.MSSQLServer:
  112. da = new MSSqlDataAccess(dbp.ConnectionString);
  113. break;
  114. case DatabaseType.OleDb:
  115. da = new OleDbDataAccess(dbp.ConnectionString);
  116. break;
  117. case DatabaseType.Oracle:
  118. da = new OracleDataAccess(dbp.ConnectionString);
  119. break;
  120. case DatabaseType.MySQL:
  121. da = new MySqlDataAccess(dbp.ConnectionString);
  122. break;
  123. case DatabaseType.SQLite:
  124. da = new SQLiteDataAccess(dbp.ConnectionString);
  125. break;
  126. default:
  127. da = new MSSqlDataAccess(dbp.ConnectionString);
  128. break;
  129. }
  130. return da;
  131. }
  132. //public static DbParameter CreateDbParameter()
  133. //{
  134. // //switch (DbHelper.DbType)
  135. // //{
  136. // // case DatabaseType.Oracle:
  137. // // return new OracleParameter();
  138. // // case DatabaseType.SqlServer:
  139. // // return new SqlParameter();
  140. // // case DatabaseType.Access:
  141. // // return new OleDbParameter();
  142. // // case DatabaseType.MySql:
  143. // // return new MySqlParameter();
  144. // // case DatabaseType.SQLite:
  145. // // return new SQLiteParameter();
  146. // //}
  147. // throw new Exception("数据库类型目前不支持!");
  148. //}
  149. /// <summary>
  150. /// 获取数据库类型
  151. /// </summary>
  152. /// <param name="configName"></param>
  153. /// <returns></returns>
  154. public static DatabaseType GetDatabaseType(string configName)
  155. {
  156. switch (configName.ToLower())
  157. {
  158. case "mssql":
  159. return DatabaseType.MSSQLServer;
  160. case "oledb":
  161. return DatabaseType.OleDb;
  162. case "oracle":
  163. return DatabaseType.Oracle;
  164. case "mysql":
  165. return DatabaseType.MySQL;
  166. case "sqlite":
  167. return DatabaseType.SQLite;
  168. default:
  169. return DatabaseType.MSSQLServer;
  170. }
  171. }
  172. /// <summary>
  173. /// 默认数据库
  174. /// </summary>
  175. public static string DatabaseDefault
  176. {
  177. get { return ConfigurationManager.AppSettings["Default"].ToString(); }
  178. }
  179. /// <summary>
  180. /// 获取数据库类型
  181. /// </summary>
  182. /// <param name="configName"></param>
  183. /// <returns></returns>
  184. public static DatabaseType GetDatabaseType()
  185. {
  186. return GetDatabaseType("Default");
  187. }
  188. }
  189. }