面向对象编程模块内高内聚模块间低耦合数据库操作工具类
Posted chenyanbin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程模块内高内聚模块间低耦合数据库操作工具类相关的知识,希望对你有一定的参考价值。
一、web.config帮助类(ConfigHelper.cs)
1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Reflection; 5 6 namespace Common 7 8 /// <summary> 9 /// web.config操作类 10 /// author:陈彦斌 11 /// 时间:2019年7月14日23:32:08 12 /// 使用前需引用程序集:System.configuration 13 /// </summary> 14 public sealed class ConfigHelper 15 16 /// <summary> 17 /// 获取系统配置信息 18 /// </summary> 19 /// <typeparam name="SystemConfig"></typeparam> 20 /// <returns></returns> 21 public static SystemConfig GetAppSettingsAllInfo() 22 23 try 24 25 SystemConfig t = new SystemConfig(); 26 string[] arrSysCfg = ConfigurationManager.AppSettings.AllKeys; 27 string value = string.Empty; 28 foreach (var key in arrSysCfg) 29 30 value = CacheHelper.GetAppSettings(key).ToString(); 31 foreach (PropertyInfo pi in t.GetType().GetProperties()) 32 33 if (key.Contains(pi.Name)) 34 35 if (!StringUtil.isNullOrBlank(value)) 36 37 pi.SetValue(t, value, null); 38 39 40 41 42 return t; 43 44 catch(Exception ex) 45 46 throw ex; 47 48 49 /// <summary> 50 /// 获取链接字符串 51 /// </summary> 52 /// <param name="key"></param> 53 /// <returns></returns> 54 public static string GetConnectionString(string key) 55 56 return ConfigurationManager.ConnectionStrings[key].ConnectionString; 57 58 /// <summary> 59 /// 获取AppSettings中配置String信息 60 /// </summary> 61 /// <param name="key">键</param> 62 /// <returns></returns> 63 public static string GetConfigString(string key) 64 65 object objValue = CacheHelper.GetCache(key); 66 if (objValue == null) //缓冲区没有值 67 68 objValue = CacheHelper.GetAppSettings(key); 69 if (objValue != null) 70 71 CacheHelper.SetCache(key, objValue, DateTime.Now.AddMinutes(180), TimeSpan.Zero); 72 73 74 return objValue.ToString(); 75 76 /// <summary> 77 /// 获取AppSettings中配置Bool信息 78 /// </summary> 79 /// <param name="key">键</param> 80 /// <returns></returns> 81 public static bool GetConfigBool(string key) 82 83 object objValue= CacheHelper.GetAppSettings(key); 84 if (StringUtil.isNullOrBlank(objValue)) 85 86 try 87 88 bool.Parse(objValue.ToString()); 89 return true; 90 91 catch 92 93 return false; 94 95 96 return false; 97 98 /// <summary> 99 /// 获取AppSettings中配置decimal信息 100 /// </summary> 101 /// <param name="key"></param> 102 /// <returns></returns> 103 public static decimal GetConfigDecimal(string key) 104 105 object objValue = CacheHelper.GetAppSettings(key); 106 if (StringUtil.isNullOrBlank(objValue)) 107 108 try 109 110 return decimal.Parse(objValue.ToString()); 111 112 catch 113 114 return 0; 115 116 117 return 0; 118 119 /// <summary> 120 /// 获取AppSettings中配置DateTime信息,可空 121 /// </summary> 122 /// <param name="key">键</param> 123 /// <returns></returns> 124 public static DateTime? GetConfigDateTime(string key) 125 126 DateTime? DateTimeNull = null; 127 object objValue = CacheHelper.GetAppSettings(key); 128 if (StringUtil.isNullOrBlank(objValue)) 129 130 try 131 132 return DateTime.Parse(objValue.ToString()); 133 134 catch 135 136 return DateTimeNull; 137 138 139 return DateTimeNull; 140 141 142 /// <summary> 143 /// 系统配置类 144 /// </summary> 145 public sealed class SystemConfig 146 147 /// <summary> 148 /// 数据库连接字符串 149 /// </summary> 150 public string ConnectionString get; set; 151 /// <summary> 152 /// 数据库类型 153 /// </summary> 154 public string dbType get; set; 155 /// <summary> 156 /// 打印报错SQL语句物理路径 157 /// </summary> 158 public string PrintErrorSqlPath get; set; 159 /// <summary> 160 /// 是否打印 161 /// </summary> 162 public string IsPrint get; set; 163 164
二、缓存帮助类(CacheHelper.cs)
1 using System; 2 using System.Collections; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Caching; 6 7 namespace Common 8 9 /// <summary> 10 /// 缓存帮助类 11 /// author:陈彦斌 12 /// 时间:2019年7月14日14:25:30 13 /// HttpRuntime.Cache 14 /// </summary> 15 public sealed class CacheHelper 16 17 /// <summary> 18 /// 获取configuratio节点下appSettings中add的值 19 /// </summary> 20 /// <param name="key">AppSettings的键</param> 21 /// <returns></returns> 22 public static object GetAppSettings(string key) 23 24 return ConfigurationManager.AppSettings[key]; 25 26 /// <summary> 27 /// 获取当前应用程序指定CacheKey的值 28 /// </summary> 29 /// <param name="CacheKey">appSettings节点下add中的键</param> 30 /// <returns></returns> 31 public static object GetCache(string CacheKey) 32 33 Cache objCache = HttpRuntime.Cache; 34 return objCache[CacheKey]; 35 36 /// <summary> 37 /// 设置数据缓存(慎用) 38 /// </summary> 39 /// <param name="CacheKey">键</param> 40 /// <param name="CacheValue">值</param> 41 public static void SetCache(string CacheKey,object CacheValue) 42 43 Cache objCache = HttpRuntime.Cache; 44 objCache.Insert(CacheKey, CacheValue); 45 46 /// <summary> 47 /// 设置数据缓存 48 /// </summary> 49 /// <param name="CacheKey">键</param> 50 /// <param name="CacheValue">值</param> 51 /// <param name="TimeOut">时间间隔</param> 52 public static void SetCache(string CacheKey, object CacheValue, TimeSpan TimeOut) 53 54 Cache objCache = HttpRuntime.Cache; 55 objCache.Insert(CacheKey, CacheValue, null, DateTime.MaxValue, TimeOut, CacheItemPriority.NotRemovable, null); 56 57 /// <summary> 58 /// 设置数据缓存 59 /// </summary> 60 /// <param name="CacheKey">键</param> 61 /// <param name="CacheValue">值</param> 62 /// <param name="absoluteExpiration">绝对过期时间</param> 63 /// <param name="slidingExpiration">时间间隔</param> 64 public static void SetCache(string CacheKey, object CacheValue, DateTime absoluteExpiration, TimeSpan slidingExpiration) 65 66 Cache objCache = HttpRuntime.Cache; 67 objCache.Insert(CacheKey, CacheValue, null, absoluteExpiration, slidingExpiration); 68 69 /// <summary> 70 /// 移除全部缓存 71 /// </summary> 72 public static void RemovaAllCache() 73 74 Cache objCache = HttpRuntime.Cache; 75 IDictionaryEnumerator CacheEnum = objCache.GetEnumerator(); 76 while (CacheEnum.MoveNext()) 77 78 objCache.Remove(CacheEnum.Key.ToString()); 79 80 81 /// <summary> 82 /// 移除指定键的缓存 83 /// </summary> 84 /// <param name="CacheKey">键</param> 85 public static void RemovaAllCache(string CacheKey) 86 87 Cache objCache = HttpRuntime.Cache; 88 objCache.Remove(CacheKey); 89 90 91
三、数据库基类(DbBaseTool.cs)
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO; 5 using System.Data.Common; 6 using System.Data; 7 using System.Data.SqlClient; 8 using System.Data.OracleClient; 9 using System.Threading; 10 11 namespace Tool 12 13 /// <summary> 14 /// 操作数据库基类 15 /// author:陈彦斌 16 /// 时间:2019年7月14日23:35:30 17 /// </summary> 18 public abstract class DbBaseTool 19 20 public const string c_where = " WHERE "; 21 public const string c_where_one_equal_one = " WHERE 1=1 "; 22 public const string c_where_one_equal_one_and = " WHERE 1=1 AND "; 23 public const string c_like = " LIKE "; 24 public const string c_and = " AND "; 25 public const string c_or = " OR "; 26 public const string c_equal = " = "; 27 public const char c_comma_split = ‘,‘; 28 29 /// <summary> 30 /// 错误信息打印类 31 /// author:陈彦斌 32 /// 时间:2019年7月14日23:36:10 33 /// </summary> 34 public class PrintSqlTool 35 36 public static string LogBasePath get; set; 37 public static Queue<string> execSqlQueue = new Queue<string>(); 38 private const string printTxtSqlTemp = "打印时间:0\r\nSQL语句:\r\n 1\r\n"; 39 static PrintSqlTool() 40 41 ThreadPool.QueueUserWorkItem(o => 42 43 while (true) 44 45 lock (execSqlQueue) 46 47 if (execSqlQueue.Count > 0) 48 49 PrintSqlToText(LogBasePath,execSqlQueue.Dequeue()); 50 51 52 53 ); 54 55 /// <summary> 56 /// 打印报错SQL语句 57 /// </summary> 58 /// <param name="strPath">物理绝对路径</param> 59 /// <param name="sql">报错SQL语句</param> 60 public static void PrintSqlToText(string strPath, string sql) 61 62 appendStrToTxtFile(strPath, sql); 63 64 /// <summary> 65 /// 打印报错SQL语句 66 /// </summary> 67 /// <param name="strPath">物理绝对路径</param> 68 /// <param name="list">报错SQL语句集合</param> 69 public static void PrintSqlToText(string strPath, List<string> list) 70 71 StringBuilder sb = new StringBuilder(); 72 foreach (var item in list) 73 74 sb.Append(item).Append(";"); 75 76 appendStrToTxtFile(strPath, sb.ToString().TrimEnd(‘,‘)); 77 78 /// <summary> 79 /// 向文本追加字符串 80 /// </summary> 81 /// <param name="fileFullPath">物理绝对路径</param> 82 /// <param name="errStr">报错语句</param> 83 private static void appendStrToTxtFile(string fileFullPath, string errStr) 84 85 FileStream fs = null; //文件流 86 StreamWriter sw = null; //写入流 87 try 88 89 if (File.Exists(fileFullPath)) //判断文件是否存在 90 91 fs = new FileStream(fileFullPath, FileMode.Append); //打开文件搜寻到文件尾 92 93 else 94 95 fs = new FileStream(fileFullPath, FileMode.Create); //创建文件 96 97 sw = new StreamWriter(fs, Encoding.UTF8); //指定写入格式 98 sw.Write(string.Format(printTxtSqlTemp,DateTime.Now.ToString(), errStr)); //写入 99 100 catch (UnauthorizedAccessException err) 101 102 throw err; 103 104 catch (IOException err) 105 106 throw err; 107 108 finally 109 110 if (sw != null) 111 112 sw.Close(); 113 114 if (fs != null) 115 116 fs.Close(); 117 118 119 120 121 /// <summary> 122 /// 数据接口类 123 /// author:陈彦斌 124 /// 时间:2019年7月14日23:36:51 125 /// </summary> 126 public interface IDbProvider 127 128 /// <summary> 129 /// 连接字符串 130 /// </summary> 131 string connStr get; set; 132 /// <summary> 133 /// 初始化 IDbConnection 类的新实例。 134 /// </summary> 135 /// <returns></returns> 136 IDbConnection GetConnection(); 137 /// <summary> 138 /// 如果给定包含连接字符串的字符串,则初始化 IDbConnection 类的新实例。 139 /// </summary> 140 /// <param name="connectionString">用于打开 SQL Server 数据库的连接。</param> 141 /// <returns></returns> 142 IDbConnection GetConnection(string connectionString); 143 /// <summary> 144 /// 初始化 IDbCommand 类的新实例。 145 /// </summary> 146 /// <returns></returns> 147 IDbCommand GetCommand(); 148 /// <summary> 149 /// 用查询文本初始化 IDbCommand 类的新实例。 150 /// </summary> 151 /// <param name="cmdText">查询的文本。</param> 152 /// <returns></returns> 153 IDbCommand GetCommand(string cmdText); 154 /// <summary> 155 /// 初始化 IDbCommand 类的新实例。 156 /// </summary> 157 /// <param name="connection">数据库链接字符串</param> 158 /// <param name="transaction">将在其中执行 IDbCommand 的 IDbTransaction。</param> 159 /// <returns></returns> 160 IDbCommand GetCommand(IDbConnection connection, IDbTransaction transaction); 161 /// <summary> 162 /// 初始化具有查询文本和 IDbConnection 的 IDbCommand类的新实例。 163 /// </summary> 164 /// <param name="cmdText">查询的文本。</param> 165 /// <param name="connection">数据库链接字符串</param> 166 /// <returns></returns> 167 IDbCommand GetCommand(string cmdText, IDbConnection connection); 168 /// <summary> 169 /// 初始化 IDbCommand 类的新实例。 170 /// </summary> 171 /// <param name="cmdText">查询的文本。</param> 172 /// <param name="connection">数据库链接字符串</param> 173 /// <param name="transaction">将在其中执行 IDbCommand 的 IDbTransaction。</param> 174 /// <returns></returns> 175 IDbCommand GetCommand(string cmdText, IDbConnection connection, IDbTransaction transaction); 176 /// <summary> 177 /// 初始化 DbDataAdapter 类的新实例。 178 /// </summary> 179 /// <returns></returns> 180 DbDataAdapter GetDataAdapter(); 181 /// <summary> 182 /// 初始化 DbDataAdapter 类的新实例,用指定的 DbDataAdapter 作为 DbDataAdapter.SelectCommand 的属性 183 /// </summary> 184 /// <param name="selectCommand">一个 IDbCommand(可以是 Transact-SQL SELECT 语句或存储过程),已设置为 DbDataAdapter 的 IDbCommand 属性。</param> 185 /// <returns></returns> 186 DbDataAdapter GetDataAdapter(IDbCommand selectCommand); 187 /// <summary> 188 /// 使用 IDbCommand 和 IDbConnection 对象初始化 DbDataAdapter 类的一个新实例。 189 /// </summary> 190 /// <param name="selectCommandText">一个 System.String,它是将要由 DbDataAdapter 的 IDbCommand 属性使用的 Transact-SQL SELECT 语句或存储过程。</param> 191 /// <param name="selectConnection">数据库链接字符串</param> 192 /// <returns></returns> 193 DbDataAdapter GetDataAdapter(string selectCommandText, IDbConnection selectConnection); 194 //添加参数 195 IDataParameter GetParaneter(string param_name, DbType db_type); 196 IDataParameter GetParaneter(string param_name, string param_text); 197 IDataParameter GetParaneter(string param_name, DbType db_type, byte[] fs); 198 IDataParameter GetParaneter(string param_name, DbType db_type, string param_text); 199 IDataParameter GetParaneter(string param_name, DbType db_type, string param_text, int para_size); 200 IDataParameter GetParaneter(string param_name, DbType db_type, string param_text, ParameterDirection ptype); 201 202 /// <summary> 203 /// SqlServer数据库 204 /// author:陈彦斌 205 /// 时间:2019年7月14日23:37:25 206 /// </summary> 207 public sealed class SqlServerProvider : IDbProvider 208 209 private string _get_conn; 210 private const string paramhead = "@"; 211 public SqlServerProvider(string strConn) 212 213 _get_conn = strConn; 214 215 public string connStr 216 217 get 218 219 return _get_conn; 220 221 222 set 223 224 _get_conn = value; 225 226 227 228 public IDbCommand GetCommand() 229 230 return new SqlCommand(); 231 232 233 public IDbCommand GetCommand(string cmdText) 234 235 return new SqlCommand(cmdText); 236 237 238 public IDbCommand GetCommand(string cmdText, IDbConnection connection) 239 240 return new SqlCommand(cmdText, (SqlConnection)connection); 241 242 243 public IDbCommand GetCommand(IDbConnection connection, IDbTransaction transaction) 244 245 return GetCommand(null, connection, transaction); 246 247 248 public IDbCommand GetCommand(string cmdText, IDbConnection connection, IDbTransaction transaction) 249 250 return new SqlCommand(cmdText, (SqlConnection)connection, (SqlTransaction)transaction); 251 252 253 public IDbConnection GetConnection() 254 255 return new SqlConnection(this.connStr); 256 257 258 public IDbConnection GetConnection(string connectionString) 259 260 return new SqlConnection(connectionString); 261 262 263 public DbDataAdapter GetDataAdapter() 264 265 return new SqlDataAdapter(); 266 267 268 public DbDataAdapter GetDataAdapter(IDbCommand selectCommand) 269 270 return new SqlDataAdapter((SqlCommand)selectCommand); 271 272 273 public DbDataAdapter GetDataAdapter(string selectCommandText, IDbConnection selectConnection) 274 275 return new SqlDataAdapter(selectCommandText, (SqlConnection)selectConnection); 276 277 278 public IDataParameter GetParaneter(string param_name, string param_text) 279 280 return new SqlParameter(paramhead + param_name, param_text); 281 282 283 public IDataParameter GetParaneter(string param_name, DbType db_type) 284 285 return new SqlParameter(paramhead + param_name, db_type); 286 287 288 public IDataParameter GetParaneter(string param_name, DbType db_type, string param_text) 289 290 SqlParameter param = new SqlParameter(paramhead + param_name, db_type); 291 param.Value = param_text; 292 return param; 293 294 295 public IDataParameter GetParaneter(string param_name, DbType db_type, byte[] fs) 296 297 SqlParameter param = new SqlParameter(paramhead + param_name, db_type); 298 param.Value = fs; 299 return param; 300 301 302 public IDataParameter GetParaneter(string param_name, DbType db_type, string param_text, ParameterDirection ptype) 303 304 SqlParameter param = new SqlParameter(paramhead + param_name, db_type); 305 param.Value = param_text; 306 param.Direction = ptype; 307 return param; 308 309 310 public IDataParameter GetParaneter(string param_name, DbType db_type, string param_text, int para_size) 311 312 SqlParameter param = new SqlParameter(paramhead + param_name, db_type); 313 param.Value = param_text; 314 param.Size = para_size; 315 return param; 316 317 318 /// <summary> 319 /// Oracle数据库 320 /// author:陈彦斌 321 /// 时间:2019年7月14日23:37:50 322 /// </summary> 323 public sealed class OracleProvider : IDbProvider 324 325 private string _get_conn; 326 public OracleProvider(string strConn) 327 328 _get_conn = strConn; 329 330 public string connStr 331 332 get 333 334 return _get_conn; 335 336 337 set 338 339 _get_conn = value; 340 341 342 343 public IDbCommand GetCommand() 344 345 return new OracleCommand(); 346 347 348 public IDbCommand GetCommand(string cmdText) 349 350 return new OracleCommand(cmdText); 351 352 353 public IDbCommand GetCommand(IDbConnection connection, IDbTransaction transaction) 354 355 return GetCommand(null, connection, transaction); 356 357 358 public IDbCommand GetCommand(string cmdText, IDbConnection connection) 359 360 return new OracleCommand(cmdText, (OracleConnection)connection); 361 362 363 public IDbCommand GetCommand(string cmdText, IDbConnection connection, IDbTransaction transaction) 364 365 return new OracleCommand(cmdText, (OracleConnection)connection, (OracleTransaction)transaction); 366 367 368 public IDbConnection GetConnection() 369 370 return new OracleConnection(this.connStr); 371 372 373 public IDbConnection GetConnection(string connectionString) 374 375 return new OracleConnection(connectionString); 376 377 378 public DbDataAdapter GetDataAdapter() 379 380 return new OracleDataAdapter(); 381 382 383 public DbDataAdapter GetDataAdapter(IDbCommand selectCommand) 384 385 return new OracleDataAdapter((OracleCommand)selectCommand); 386 387 388 public DbDataAdapter GetDataAdapter(string selectCommandText, IDbConnection selectConnection) 389 390 return new OracleDataAdapter(selectCommandText, (OracleConnection)selectConnection); 391 392 393 public IDataParameter GetParaneter(string param_name, string param_text) 394 395 return new OracleParameter(param_name, param_text); 396 397 398 public IDataParameter GetParaneter(string param_name, DbType db_type) 399 400 return new OracleParameter(param_name, db_type); 401 402 403 public IDataParameter GetParaneter(string param_name, DbType db_type, string param_text) 404 405 OracleParameter param = new OracleParameter(param_name, db_type); 406 param.Value = param_text; 407 return param; 408 409 410 public IDataParameter GetParaneter(string param_name, DbType db_type, byte[] fs) 411 412 OracleParameter param = new OracleParameter(param_name, db_type); 413 param.Value = fs; 414 return param; 415 416 417 public IDataParameter GetParaneter(string param_name, DbType db_type, string param_text, ParameterDirection ptype) 418 419 OracleParameter param = new OracleParameter(); 420 param.ParameterName = param_name; 421 if (db_type == DbType.Int32) 422 423 param.OracleType = OracleType.Number; 424 param.Value = Convert.ToDecimal(param_text); 425 426 else if (db_type == DbType.String) 427 428 param.OracleType = OracleType.VarChar; 429 param.Value = param_text; 430 431 else 432 433 param.DbType = db_type; 434 param.Value = param_text; 435 436 437 param.Direction = ptype; 438 return param; 439 440 441 public IDataParameter GetParaneter(string param_name, DbType db_type, string param_text, int para_size) 442 443 OracleParameter param = new OracleParameter(param_name, db_type); 444 param.Value = param_text; 445 param.Size = para_size; 446 return param; 447 448 449
四、数据库帮助类(DbUtil.cs)
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Reflection; 5 using System.Data.Common; 6 7 namespace Tool 8 9 /// <summary> 10 /// 数据库操作类 11 /// author:陈彦斌 12 /// 时间:2019年7月14日23:39:07 13 /// </summary> 14 public sealed class DbUtil : DbBaseTool 15 16 private static object lockHelper = new object(); 17 private static SystemConfig SysCfg; 18 private static IDbProvider defaultPro; 19 private static string connectionString get return SysCfg.ConnectionString; 20 public static void resetDbUtil() 21 22 lock (lockHelper) 23 24 if (defaultPro == null) 25 26 try 27 28 SysCfg = ConfigHelper.GetAppSettingsAllInfo(); 29 if (SysCfg.dbType.ToLower() == "sqlserver") 30 31 defaultPro = new SqlServerProvider(connectionString); 32 33 else if (SysCfg.dbType.ToLower() == "oracle") 34 35 defaultPro = new OracleProvider(connectionString); 36 37 else 38 39 throw new NotImplementedException(); 40 41 42 catch (Exception ex) 43 44 throw ex; 45 46 47 48 49 public static void resetDbUtil(string DbName) 50 51 lock (lockHelper) 52 53 if (defaultPro == null) 54 55 try 56 57 SysCfg = ConfigHelper.GetAppSettingsAllInfo(); 58 if (SysCfg.dbType.ToLower() == "sqlserver") 59 60 defaultPro = new SqlServerProvider(connectionString); 61 62 else if (SysCfg.dbType.ToLower() == "oracle") 63 64 defaultPro = new OracleProvider(connectionString); 65 66 else 67 68 throw new NotImplementedException(); 69 70 71 catch (Exception ex) 72 73 throw ex; 74 75 76 77 78 static DbUtil() 79 80 if (defaultPro == null) 81 82 resetDbUtil(); 83 84 85 /// <summary> 86 /// 执行查询SQL语句,返回DataTable 87 /// </summary> 88 /// <param name="strSql">查询SQL语句</param> 89 /// <returns></returns> 90 public static DataTable QueryDT(string strSql) 91 92 using (IDbConnection conn = defaultPro.GetConnection()) 93 94 if (conn.State!=ConnectionState.Open) 95 96 conn.Open(); 97 98 try 99 100 PrintErrorStrSql(strSql); 101 IDbDataAdapter adap = defaultPro.GetDataAdapter(strSql, conn); 102 DataTable dt = new DataTable(); 103 DataSet ds = new DataSet(); 104 adap.Fill(ds); 105 dt = ds.Tables[0]; 106 return dt; 107 108 catch (DbException ex) 109 110 throw new Exception(ex.Message); 111 112 finally 113 114 conn.Close(); 115 116 117 118 /// <summary> 119 /// 执行查询SQL语句,反射会实体类 120 /// </summary> 121 /// <typeparam name="T">数据类型</typeparam> 122 /// <param name="strSql">查询SQL语句</param> 123 /// <returns></returns> 124 public static T QueryDT<T>(string strSql) where T : new() 125 126 try 127 128 T t = new T(); 129 DataTable dt = QueryDT(strSql); 130 foreach (DataRow dr in dt.Rows) 131 132 foreach (PropertyInfo pi in t.GetType().GetProperties()) 133 134 if (dt.Columns.Contains(pi.Name)) 135 136 if (!pi.CanWrite) continue; 137 var value = dr[pi.Name]; 138 if (value != DBNull.Value) 139 140 switch (pi.PropertyType.FullName) 141 142 case "System.Decimal": 143 pi.SetValue(t, decimal.Parse(value.ToString()), null); 144 break; 145 case "System.String": 146 pi.SetValue(t, value.ToString(), null); 147 break; 148 case "System.Int32": 149 pi.SetValue(t, int.Parse(value.ToString()), null); 150 break; 151 default: 152 pi.SetValue(t, value, null); 153 break; 154 155 156 157 158 159 return t; 160 161 catch (DbException ex) 162 163 throw new Exception(ex.Message); 164 165 166 /// <summary> 167 /// 执行查询SQL语句,反射出实体类集合 168 /// </summary> 169 /// <typeparam name="T">数据类型</typeparam> 170 /// <param name="strSql">查询SQL语句</param> 171 /// <returns></returns> 172 public static List<T> QueryList<T>(string strSql) where T : new() 173 174 try 175 176 List<T> ts = new List<T>(); 177 ts=toEntity<T>(QueryDT(strSql)); 178 return ts; 179 180 catch (DbException ex) 181 182 throw new Exception(ex.Message); 183 184 185 /// <summary> 186 /// 将DataTable转换成实体类 187 /// </summary> 188 /// <typeparam name="T">实体类</typeparam> 189 /// <param name="dt">DataTable</param> 190 /// <returns></returns> 191 public static List<T> toEntity<T>(DataTable dt) where T : new() 192 193 List<T> ts = new List<T>(); 194 foreach (DataRow dr in dt.Rows) 195 196 T t = new T(); 197 foreach (PropertyInfo pi in t.GetType().GetProperties()) 198 199 if (dt.Columns.Contains(pi.Name)) 200 201 if (!pi.CanWrite) continue; 202 var value = dr[pi.Name]; 203 if (value != DBNull.Value) 204 205 switch (pi.PropertyType.FullName) 206 207 case "System.Decimal": 208 pi.SetValue(t, decimal.Parse(value.ToString()), null); 209 break; 210 case "System.String": 211 pi.SetValue(t, value.ToString(), null); 212 break; 213 case "System.Int32": 214 pi.SetValue(t, int.Parse(value.ToString()), null); 215 break; 216 default: 217 pi.SetValue(t, value, null); 218 break; 219 220 221 222 223 ts.Add(t); 224 225 return ts; 226 227 /// <summary> 228 /// 对数据进行增、删、改 229 /// </summary> 230 /// <param name="strSql">SQL语句</param> 231 /// <returns></returns> 232 public static int ExecuteSql(string strSql) 233 234 using (IDbConnection conn = defaultPro.GetConnection()) 235 236 using (IDbCommand cmd = defaultPro.GetCommand(strSql, conn)) 237 238 try 239 240 if (conn.State != ConnectionState.Open) 241 242 conn.Open(); 243 244 return cmd.ExecuteNonQuery(); 245 246 catch (Exception ex) 247 248 conn.Close(); 249 throw ex; 250 251 finally 252 253 conn.Close(); 254 255 256 257 258 /// <summary> 259 /// 对数据进行增、删、改 260 /// </summary> 261 /// <param name="strSql">SQL语句</param> 262 /// <returns></returns> 263 public static int ExecuteSqlTrans(string strSql) 264 265 using (IDbConnection conn = defaultPro.GetConnection()) 266 267 if (conn.State != ConnectionState.Open) 268 269 conn.Open(); 270 271 IDbTransaction trans = conn.BeginTransaction(); 272 IDbCommand cmd = defaultPro.GetCommand(conn, trans); 273 try 274 275 int resCount = 0; 276 PrintErrorStrSql(strSql); 277 cmd.CommandText = strSql; 278 resCount = cmd.ExecuteNonQuery(); 279 trans.Commit(); 280 return resCount; 281 282 catch (Exception ex) 283 284 trans.Rollback(); 285 throw ex; 286 287 finally 288 289 cmd.Dispose(); 290 conn.Close(); 291 292 293 294 /// <summary> 295 /// 对数据进行增、删、改 296 /// </summary> 297 /// <param name="listSql">SQL集合</param> 298 /// <returns></returns> 299 public static int ExecuteSqlTrans(List<string> listSql) 300 301 using (IDbConnection conn = defaultPro.GetConnection()) 302 303 if (conn.State != ConnectionState.Open) 304 305 conn.Open(); 306 307 IDbTransaction trans = conn.BeginTransaction(); 308 IDbCommand cmd = defaultPro.GetCommand(conn, trans); 309 try 310 311 int resCount = 0; 312 string strSql = string.Empty; 313 for (int i = 0; i < listSql.Count; i++) 314 315 strSql = listSql[i]; 316 PrintErrorStrSql(strSql); 317 cmd.CommandText = strSql; 318 resCount += cmd.ExecuteNonQuery(); 319 320 trans.Commit(); 321 return resCount; 322 323 catch (Exception ex) 324 325 trans.Rollback(); 326 throw ex; 327 328 finally 329 330 cmd.Dispose(); 331 conn.Close(); 332 333 334 335 /// <summary> 336 /// 对数据进行增、删、改 337 /// </summary> 338 /// <param name="strSql">SQL语句</param> 339 /// <param name="pms">可变参数</param> 340 /// <returns></returns> 341 public static int ExecuteSqlTrans(string strSql, IDataParameter[] pms) 342 343 using (IDbConnection conn = defaultPro.GetConnection()) 344 345 if (conn.State != ConnectionState.Open) 346 347 conn.Open(); 348 349 IDbTransaction trans = conn.BeginTransaction(); 350 using (IDbCommand cmd = defaultPro.GetCommand(conn, trans)) 351 352 if (pms != null) 353 354 foreach (IDataParameter item in pms) 355 356 cmd.Parameters.Add(item); 357 358 359 try 360 361 int resCount = 0; 362 PrintErrorStrSql(strSql); 363 cmd.CommandText = strSql; 364 resCount = cmd.ExecuteNonQuery(); 365 trans.Commit(); 366 return resCount; 367 368 catch (Exception ex) 369 370 trans.Rollback(); 371 throw ex; 372 373 finally 374 375 conn.Close(); 376 377 378 379 380 private static void PrintErrorStrSql(string strSql) 381 382 if (SysCfg.IsPrint == "true" && !StringUtil.isNullOrBlank(SysCfg.PrintErrorSqlPath)) 383 384 PrintSqlTool.LogBasePath = SysCfg.PrintErrorSqlPath; 385 PrintSqlTool.execSqlQueue.Enqueue(strSql); 386 //PrintSqlTool.PrintSqlToText(SysCfg.PrintErrorSqlPath, strSql); 387 388 389 390
五、实体类基类(EntityBase.cs)
1 using System; 2 using System.Collections.Generic; 3 using System.Reflection; 4 using System.Web; 5 using System.Text; 6 using Sam.OA.Common; 7 8 namespace Sam.OA.Model 9 10 /// <summary> 11 /// 实体类基类 12 /// author:陈彦斌 13 /// 时间:2019年7月14日23:39:07 14 /// </summary> 15 [Serializable] 16 public abstract class EntityBase 17 18 /// <summary> 19 /// 获取主键 20 /// </summary> 21 /// <returns></returns> 22 public abstract string GetPrimaryKey(); 23 /// <summary> 24 /// 获取INSERT语句 25 /// </summary> 26 /// <returns></returns> 27 public string GetInsertSql() 28 29 try 30 31 Type t = this.GetType(); 32 string tableName = t.Name,pKey=this.GetPrimaryKey(),fields=string.Empty,values=string.Empty,temp=null; 33 foreach (PropertyInfo pi in t.GetProperties()) 34 35 if (!pi.CanWrite) continue; 36 if (pi.Name.Equals(pKey)) 37 38 continue; 39 40 temp = GetByTypeStr(pi); 41 fields += pi.Name + ","; 42 values += temp + ","; 43 44 return string.Format("Insert into 0(1) Values(2)", tableName, fields.TrimEnd(‘,‘), values.TrimEnd(‘,‘)); 45 46 catch 47 48 throw; 49 50 51 /// <summary> 52 /// 通过POST/GET请求获取Insert语句 53 /// </summary> 54 /// <param name="arrPostOrGetAllKey">POST/GET请求的所有键</param> 55 /// <param name="HttpRequest"></param> 56 /// <returns></returns> 57 public string GetInsertSql(string[] arrPostOrGetAllKey, HttpRequest Request) 58 59 try 60 61 62 Dictionary<string, string> dd = new Dictionary<string, string>(); 63 string key = string.Empty; 64 string value = string.Empty; 65 for (int i = 0; i < arrPostOrGetAllKey.Length; i++) 66 67 key = Request.Form.AllKeys[i]; 68 value = Request.Form[key]; 69 if (StringUtil.isNullOrBlank(key)) 70 71 key = Request.QueryString.AllKeys[i]; 72 value = Request.QueryString[key]; 73 74 dd.Add(key, value); 75 76 Type t = this.GetType(); 77 PropertyInfo[] pInfos = t.GetProperties(); 78 string tableName = t.Name, pKey = this.GetPrimaryKey(), pValue = string.Empty, str_fields = string.Empty; 79 StringBuilder s_fields = new StringBuilder(); 80 StringBuilder s_values = new StringBuilder(); 81 int keyIndex = -1; 82 for (int i = 0; i < pInfos.Length; i++) 83 84 if (pInfos[i].Name.Equals(pKey)) 85 86 keyIndex = i; 87 if (dd.ContainsKey(pKey)) 88 89 pValue = dd[pKey]; 90 91 continue; 92 93 if (dd.ContainsKey(pInfos[i].Name)) 94 95 s_fields.Append(pInfos[i].Name).Append(","); 96 s_values.Append(GetByTypeStr(dd[pInfos[i].Name])).Append(","); 97 98 99 return string.Format("INSERT INTO 0 (1) VALUES (2)", tableName, s_fields.ToString().TrimEnd(‘,‘), s_values.ToString().TrimEnd(‘,‘)); 100 101 catch 102 103 throw; 104 105 106 /// <summary> 107 /// 根据主键获取删除条件 108 /// </summary> 109 /// <typeparam name="T"></typeparam> 110 /// <param name="pKey"></param> 111 /// <returns></returns> 112 public string GetDeleteSql<T>(int pKey) 113 114 try 115 116 Type t = this.GetType(); 117 string table = t.Name; 118 return string.Format("DELETE FROM 0 WHERE 1 = 2", table, this.GetPrimaryKey(), pKey); 119 120 catch 121 122 throw; 123 124 125 /// <summary> 126 /// 根据主键获取删除条件 127 /// </summary> 128 /// <param name="pKey"></param> 129 /// <returns></returns> 130 public string GetDeleteSql(int pKey) 131 132 try 133 134 Type t = this.GetType(); 135 string table = t.Name; 136 return string.Format("DELETE FROM 0 WHERE 1 = 2", table, this.GetPrimaryKey(), pKey); 137 138 catch 139 140 throw; 141 142 143 /// <summary> 144 /// 根据条件获取删除语句eg:name=‘alex‘ and age=8 145 /// </summary> 146 /// <typeparam name="T"></typeparam> 147 /// <param name="deleteWhere">删除条件eg:name=‘alex‘ and age=8</param> 148 /// <returns></returns> 149 public string GetDeleteSql<T>(string deleteWhere) 150 151 try 152 153 Type t = this.GetType(); 154 string table = t.Name; 155 return string.Format("DELETE FROM 0 WHERE 1", table, deleteWhere); 156 157 catch 158 159 throw; 160 161 162 /// <summary> 163 /// 根据条件获取删除语句eg:name=‘alex‘ and age=8 164 /// </summary> 165 /// <typeparam name="T"></typeparam> 166 /// <param name="deleteWhere">删除条件eg:name=‘alex‘ and age=8</param> 167 /// <returns></returns> 168 public string GetDeleteSql(string deleteWhere) 169 170 try 171 172 Type t = this.GetType(); 173 string table = t.Name; 174 return string.Format("DELETE FROM 0 WHERE 1", table, deleteWhere); 175 176 catch 177 178 throw; 179 180 181 /// <summary> 182 /// 获取UPDATE语句 183 /// </summary> 184 /// <returns></returns> 185 public string GetUpdateSql() 186 187 try 188 189 Type t = this.GetType(); 190 PropertyInfo[] pInfos = t.GetProperties(); 191 string tableName = t.Name, pKey = this.GetPrimaryKey(), str_fields=string.Empty; 192 int keyIndex = -1; 193 for (int i = 0; i < pInfos.Length; i++) 194 195 if (pInfos[i].Name.Equals(pKey)) 196 197 keyIndex = i; 198 continue; 199 200 str_fields += pInfos[i].Name + " = " + GetByTypeStr(pInfos[i]) + ","; 201 202 return string.Format("UPDATE 0 SET 1 WHERE 2 = 3", tableName, str_fields.TrimEnd(‘,‘), pKey, GetByTypeStr(pInfos[keyIndex])); 203 204 catch 205 206 throw; 207 208 209 /// <summary> 210 /// 通过POST/GET请求获取UPDATE语句 211 /// </summary> 212 /// <param name="arrPostOrGetAllKey">POST/GET请求的所有键</param> 213 /// <param name="HttpRequest"></param> 214 /// <returns></returns> 215 public string GetUpdateSql(string[] arrPostOrGetAllKey, HttpRequest Request) 216 217 try 218 219 220 Dictionary<string, string> dd = new Dictionary<string, string>(); 221 string key = string.Empty; 222 string value = string.Empty; 223 for (int i = 0; i < arrPostOrGetAllKey.Length; i++) 224 225 key = Request.Form.AllKeys[i]; 226 value = Request.Form[key]; 227 if (StringUtil.isNullOrBlank(key)) 228 229 key = Request.QueryString.AllKeys[i]; 230 value = Request.QueryString[key]; 231 232 dd.Add(key, value); 233 234 Type t = this.GetType(); 235 PropertyInfo[] pInfos = t.GetProperties(); 236 string tableName = t.Name, pKey = this.GetPrimaryKey(), pValue = string.Empty, str_fields = string.Empty; 237 int keyIndex = -1; 238 for (int i = 0; i < pInfos.Length; i++) 239 240 if (pInfos[i].Name.Equals(pKey)) 241 242 keyIndex = i; 243 if (dd.ContainsKey(pKey)) 244 245 pValue = dd[pKey]; 246 247 continue; 248 249 if (dd.ContainsKey(pInfos[i].Name)) 250 251 str_fields += pInfos[i].Name + " = " + GetByTypeStr(dd[pInfos[i].Name]) + ","; 252 253 254 if (StringUtil.isNullOrBlank(pValue)) 255 256 throw new Exception("更新条件不能为空!"); 257 258 return string.Format("UPDATE 0 SET 1 WHERE 2 = 3", tableName, str_fields.TrimEnd(‘,‘), pKey, GetByTypeStr(pValue)); 259 260 catch 261 262 throw; 263 264 265 /// <summary> 266 /// 根据实体类组装查询条件,并返回查询语句 267 /// </summary> 268 /// <typeparam name="T">数据类型</typeparam> 269 /// <param name="t">实体类实例</param> 270 /// <returns></returns> 271 public string GetSelectSql<T>(T t) where T:class 272 273 try 274 275 Type t1 = t.GetType(); 276 string tableName = t1.Name, temp = null; 277 StringBuilder sb = new StringBuilder(); 278 foreach (PropertyInfo pi in t1.GetProperties()) 279 280 if (!pi.CanWrite) continue; 281 temp = GetByTypeStr(pi); 282 if (!StringUtil.isNullOrBlank(temp)&& temp!="0") 283 284 sb.Append(" AND ").Append(pi.Name).Append(" = ").Append(temp).Append(" AND "); 285 286 287 if (sb.ToString().Length > 0) 288 289 string query_sql = "SELECT * FROM 0 WHERE 1=1 1"; 290 return string.Format(query_sql, tableName,sb.ToString().Substring(0,sb.ToString().Length-4)); 291 292 return ""; 293 294 catch (Exception ex) 295 296 throw ex; 297 298 299 /// <summary> 300 /// 根据查询条件,返回查询语句eg:a=‘123‘ and b=‘456‘ 301 /// </summary> 302 /// <typeparam name="T">数据类型</typeparam> 303 /// <param name="strWhere">WHERE条件:eg: a=‘123‘ and b=‘456‘ .....</param> 304 /// <returns></returns> 305 public string GetSelectSql<T>(string strWhere) where T : class 306 307 if (!StringUtil.isNullOrBlank(strWhere)) 308 309 Type t = this.GetType(); 310 string tableName = t.Name; 311 return string.Format("SELECT * FROM 0 WHERE 1=1 AND ",tableName, strWhere); 312 313 return ""; 314 315 /// <summary> 316 /// 根据查询条件,返回查询语句eg:a=‘123‘ and b=‘456‘ 317 /// </summary> 318 /// <param name="strWhere">WHERE条件:eg: a=‘123‘ and b=‘456‘ .....</param> 319 /// <returns></returns> 320 public string GetSelectSql(string strWhere) 321 322 if (!StringUtil.isNullOrBlank(strWhere)) 323 324 Type t = this.GetType(); 325 string tableName = t.Name; 326 return string.Format("SELECT * FROM 0 WHERE 1=1 AND ", tableName, strWhere); 327 328 return ""; 329 330 /// <summary> 331 /// 获取表中所有数据 332 /// </summary> 333 /// <typeparam name="T">数据类型</typeparam> 334 /// <returns></returns> 335 public string GetSelectSql<T>() where T : class 336 337 try 338 339 return string.Format("SELECT * FROM 0", this.GetType().Name); 340 341 catch (Exception ex) 342 343 throw ex; 344 345 346 /// <summary> 347 /// 获取表中所有数据 348 /// </summary> 349 /// <returns></returns> 350 public string GetSelectSql() 351 352 try 353 354 return string.Format("SELECT * FROM 0", this.GetType().Name); 355 356 catch (Exception ex) 357 358 throw ex; 359 360 361 /// <summary> 362 /// 根据主键查询表 363 /// </summary> 364 /// <typeparam name="T"></typeparam> 365 /// <param name="pKey"></param> 366 /// <returns></returns> 367 public string SelectByPrimaryKey<T>(int pKey) 368 369 try 370 371 Type t = this.GetType(); 372 string table = t.Name; 373 return string.Format("SELECT * FROM 0 WHERE 1 = 2", table, this.GetPrimaryKey(), pKey); 374 375 catch 376 377 throw; 378 379 380 /// <summary> 381 /// 根据主键查询表 382 /// </summary> 383 /// <typeparam name="T"></typeparam> 384 /// <param name="pKey"></param> 385 /// <returns></returns> 386 public string SelectByPrimaryKey(int pKey) 387 388 try 389 390 Type t = this.GetType(); 391 string table = t.Name; 392 return string.Format("SELECT * FROM 0 WHERE 1 = 2", table, this.GetPrimaryKey(), pKey); 393 394 catch 395 396 throw; 397 398 399 /// <summary> 400 /// 获取表中总行数 401 /// </summary> 402 /// <typeparam name="T">数据类型</typeparam> 403 /// <returns></returns> 404 public string GetAllRowsCount<T>() where T:class 405 406 return string.Format("SELECT COUNT(*) FROM 0",this.GetType().Name); 407 408 /// <summary> 409 /// 获取表中总行数 410 /// </summary> 411 /// <returns></returns> 412 public string GetAllRowsCount() 413 414 try 415 416 Type t = this.GetType(); 417 string table = t.Name; 418 return string.Format("SELECT COUNT(*) FROM 0", table); 419 420 catch 421 422 throw; 423 424 425 /// <summary> 426 /// 获取分页数据 427 /// </summary> 428 /// <param name="pageSize">一页多少条数据</param> 429 /// <param name="pageIndex">当前页的索引</param> 430 /// <returns></returns> 431 public virtual string GetPageData(int pageSize,int pageIndex) 432 433 try 434 435 int first = pageSize * (pageIndex - 1)+1; 436 int last = pageSize * pageIndex; 437 Type t = this.GetType(); 438 return string.Format(@"SELECT * FROM (SELECT ROW_NUMBER() over (order by 0) as row,TT.* from 1 TT) TTT 439 WHERE TTT.row BETWEEN 2 AND 3",this.GetPrimaryKey(), t.Name, first,last); 440 441 catch 442 443 throw; 444 445 446 /// <summary> 447 /// 获取分页数据 448 /// </summary> 449 /// <param name="pageSize">一页多少条数据</param> 450 /// <param name="pageIndex">当前页的索引</param> 451 /// <param name="objOrderBy">排序规则</param> 452 /// <returns></returns> 453 public virtual string GetPageData(int pageSize, int pageIndex, object objOrderBy) 454 455 try 456 457 int first = pageSize * (pageIndex - 1) + 1; 458 int last = pageSize * pageIndex; 459 Type t = this.GetType(); 460 return string.Format(@"SELECT * FROM (SELECT ROW_NUMBER() over (order by 0) as row,TT.* from 1 TT) TTT 461 WHERE TTT.row BETWEEN 2 AND 3", objOrderBy.ToString(), t.Name, first, last); 462 463 catch 464 465 throw; 466 467 468 /// <summary> 469 /// 根据数据类型反射字段值 470 /// </summary> 471 /// <param name="pInfo">公共属性</param> 472 /// <returns></returns> 473 private string GetByTypeStr(PropertyInfo pInfo) 474 475 try 476 477 string result_str = string.Empty; 478 Type t = pInfo.PropertyType; 479 object obj = pInfo.GetValue(this, null); 480 bool valueNull = StringUtil.isNullOrBlank(obj); 481 if (t == typeof(string)) 482 483 result_str = valueNull ? "null" : "‘" + obj.ToString().Replace("--","") + "‘"; 484 485 else if (t == typeof(System.Decimal) || t == typeof(System.Int16) || t == typeof(System.Int32) || t == typeof(System.Int64)) 486 487 result_str = t.Name == "Nullable`1"&& valueNull ? "null" : obj.ToString(); 488 489 else if(t==typeof(DateTime)||t.Name== "Nullable`1") 490 491 if (valueNull||DateTime.MinValue.Equals(obj)|| t.Name == "Nullable`1") 492 493 result_str = "null"; 494 495 else 496 497 result_str = "‘"+obj.ToString().Replace("年", "-").Replace("月", "-").Replace("日", "")+"‘"; 498 499 500 return result_str; 501 502 catch 503 504 throw; 505 506 507 /// <summary> 508 /// 获取字段值 509 /// </summary> 510 /// <param name="value">值</param> 511 /// <returns></returns> 512 private string GetByTypeStr(object obj) 513 514 try 515 516 if (StringUtil.IsDate(obj)) 517 518 return "‘" + obj.ToString().Replace("年", "-").Replace("月", "-").Replace("日", "") + "‘"; 519 520 if (StringUtil.IsDecimal(obj)) 521 522 return obj.ToString(); 523 524 return "‘" + obj.ToString().Replace("--", "") + "‘"; 525 526 catch 527 528 throw; 529 530 531 532
六、数据访问层接口
1 using Sam.OA.Common; 2 using Sam.OA.Model; 3 using System; 4 using System.Collections.Generic; 5 using System.Data; 6 7 namespace Sam.OA.DAL 8 9 /// <summary> 10 /// 数据访问层接口,职责:封装所有的数据访问层的公共的CRUD的方法 11 /// </summary> 12 public interface IBaseDal 13 14 /// <summary> 15 /// 添加 16 /// </summary> 17 /// <param name="model"></param> 18 /// <returns></returns> 19 int Add<T>(T model) where T : EntityBase; 20 /// <summary> 21 /// 批量添加 22 /// </summary> 23 /// <param name="listSql"></param> 24 /// <returns></returns> 25 int Add<T>(List<string> listSql) where T : EntityBase; 26 /// <summary> 27 /// 删除 28 /// </summary> 29 /// <param name="deleteWhere">删除条件</param> 30 /// <returns></returns> 31 int Delete<T>(T model, string deleteWhere) where T : EntityBase; 32 /// <summary> 33 /// 修改 34 /// </summary> 35 /// <param name="model"></param> 36 /// <returns></returns> 37 int Update<T>(T model) where T : EntityBase; 38 /// <summary> 39 /// 批量修改 40 /// </summary> 41 /// <param name="listSql">sql语句集合</param> 42 /// <returns></returns> 43 int Update<T>(List<string> listSql) where T : EntityBase; 44 /// <summary> 45 /// 查询 46 /// </summary> 47 /// <param name="model">实体类</param> 48 /// <returns></returns> 49 List<T> Select<T>(T model) where T : EntityBase, new(); 50 /// <summary> 51 /// 查询,返回实体类 52 /// </summary> 53 /// <param name="model">实体类</param> 54 /// <returns></returns> 55 T SelectEntity<T>(T model) where T : EntityBase, new(); 56 /// <summary> 57 /// 查询,返回实体类 58 /// </summary> 59 /// <param name="model">实体类</param> 60 /// <param name="strWhere">查询条件</param> 61 /// <returns></returns> 62 T SelectEntity<T>(T model, string strWhere) where T : EntityBase, new(); 63 /// <summary> 64 /// 查询 65 /// </summary> 66 /// <param name="model">实体类</param> 67 /// <param name="strWhere">查询条件</param> 68 /// <returns></returns> 69 List<T> Select<T>(T model, string strWhere) where T : EntityBase, new(); 70 /// <summary> 71 /// 获取分页集合 72 /// </summary> 73 /// <param name="pageSize">页的大小</param> 74 /// <param name="pageIndex">当前页的索引</param> 75 /// <returns></returns> 76 List<T> GetPageEntity<T>(T model, int pageSize, int pageIndex) where T : EntityBase, new(); 77 78 /// <summary> 79 /// 数据访问层基类 80 /// </summary> 81 /// <typeparam name="T"></typeparam> 82 public class BaseDal: IBaseDal 83 84 /// <summary> 85 /// 添加 86 /// </summary> 87 /// <param name="listSql">sql集合</param> 88 /// <returns></returns> 89 public int Add<T>(List<string> listSql) where T : EntityBase 90 91 try 92 93 return DbUtil.ExecuteSqlTrans(listSql); 94 95 catch (Exception ex) 96 97 throw ex; 98 99 100 /// <summary> 101 /// 添加 102 /// </summary> 103 /// <param name="model">实体类</param> 104 /// <returns></returns> 105 public int Add<T>(T model) where T:EntityBase 106 107 try 108 109 return DbUtil.ExecuteSqlTrans(model.GetInsertSql()); 110 111 catch (Exception ex) 112 113 throw ex; 114 115 116 /// <summary> 117 /// 删除 118 /// </summary> 119 /// <param name="model">实体类</param> 120 /// <param name="deleteWhere">删除条件</param> 121 /// <returns></returns> 122 public int Delete<T>(T model, string deleteWhere) where T : EntityBase 123 124 try 125 126 return DbUtil.ExecuteSqlTrans(model.GetDeleteSql(deleteWhere)); 127 128 catch (Exception ex) 129 130 throw ex; 131 132 133 /// <summary> 134 /// 获取分页数据 135 /// </summary> 136 /// <param name="model">实体类</param> 137 /// <param name="pageSize">一页多少条数据</param> 138 /// <param name="pageIndex">当前页的索引号</param> 139 /// <returns></returns> 140 public List<T> GetPageEntity<T>(T model, int pageSize, int pageIndex) where T : EntityBase,new () 141 142 try 143 144 DataTable dt = DbUtil.QueryDT(model.GetPageData(pageSize, pageIndex)); 145 return JsonHelper.DtConvertToModel<T>(dt); 146 147 catch (Exception ex) 148 149 throw ex; 150 151 152 /// <summary> 153 /// 查询 154 /// </summary> 155 /// <param name="model">实体类</param> 156 /// <returns></returns> 157 public List<T> Select<T>(T model) where T : EntityBase,new () 158 159 try 160 161 DataTable dt = DbUtil.QueryDT(model.GetSelectSql<T>(model)); 162 return JsonHelper.DtConvertToModel<T>(dt); 163 164 catch (Exception ex) 165 166 throw ex; 167 168 169 /// <summary> 170 /// 查询 171 /// </summary> 172 /// <param name="model">实体类</param> 173 /// <param name="strWhere">查询条件</param> 174 /// <returns></returns> 175 public List<T> Select<T>(T model, string strWhere) where T : EntityBase,new () 176 177 try 178 179 DataTable dt = DbUtil.QueryDT(model.GetSelectSql(strWhere)); 180 return JsonHelper.DtConvertToModel<T>(dt); 181 182 catch (Exception ex) 183 184 throw ex; 185 186 187 /// <summary> 188 /// 查询 189 /// </summary> 190 /// <param name="model">实体类</param> 191 /// <returns></returns> 192 public T SelectEntity<T>(T model) where T : EntityBase,new () 193 194 try 195 196 return DbUtil.QueryDT<T>(model.GetSelectSql<T>(model)); 197 198 catch (Exception ex) 199 200 throw ex; 201 202 203 /// <summary> 204 /// 查询 205 /// </summary> 206 /// <param name="model">实体类</param> 207 /// <param name="strWhere">查询条件</param> 208 /// <returns></returns> 209 public T SelectEntity<T>(T model, string strWhere) where T : EntityBase,new () 210 211 try 212 213 return DbUtil.QueryDT<T>(model.GetSelectSql(strWhere)); 214 215 catch (Exception ex) 216 217 throw ex; 218 219 220 /// <summary> 221 /// 更新 222 /// </summary> 223 /// <param name="model">实体类</param> 224 /// <returns></returns> 225 public int Update<T>(T model) where T : EntityBase 226 227 try 228 229 return DbUtil.ExecuteSqlTrans(model.GetUpdateSql()); 230 231 catch (Exception ex) 232 233 throw ex; 234 235 236 /// <summary> 237 /// 更新 238 /// </summary> 239 /// <param name="listSql">sql集合</param> 240 /// <returns></returns> 241 public int Update<T>(List<string> listSql) where T : EntityBase 242 243 try 244 245 return DbUtil.ExecuteSqlTrans(listSql); 246 247 catch (Exception ex) 248 249 throw ex; 250 251 252 253
数据访问层eg:
1 using Sam.OA.Model.Sam; 2 using System; 3 using System.Collections.Generic; 4 using System.Data; 5 using Sam.OA.Common; 6 using Sam.OA.Model; 7 using Sam.OA.DAL.ISam; 8 9 namespace Sam.OA.DAL.Sam 10 11 /// <summary> 12 /// 用户信息数据访问层 13 /// </summary> 14 public class UserInfoDAL : BaseDal, IUserInfoDAL 15 16 public void Test() 17 18 throw new NotImplementedException(); 19 20 21
数据访问层接口eg:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Sam.OA.DAL.ISam 8 9 /// <summary> 10 /// 用户信息数据访问层接口 11 /// </summary> 12 public interface IUserInfoDAL:IBaseDal 13 14 void Test(); 15 16
业务逻辑层eg:
1 using Sam.OA.DALFactory; 2 using Sam.OA.Model.Sam; 3 4 namespace Sam.OA.BLL.Sam 5 6 public class UserInfoBal 7 8 IDbSession dbSession = DbSessionFactory.GetCurrentDbSession(); 9 /// <summary> 10 /// 添加 11 /// </summary> 12 /// <param name="model">实体类</param> 13 /// <returns></returns> 14 public bool Add(UserInfo model) 15 16 return dbSession.UserInfoDal.Add<UserInfo>(model) > 0; 17 18 19
简单工厂帮助类eg:
1 using Sam.OA.DAL.ISam; 2 using Sam.OA.DAL.Sam; 3 4 namespace Sam.OA.DALFactory 5 6 /// <summary> 7 /// 数据访问层静态工厂帮助类 8 /// </summary> 9 public class StaticFactory 10 11 /// <summary> 12 /// 创建用户信息简单工厂 13 /// </summary> 14 /// <returns></returns> 15 public static IUserInfoDAL CreateUserInfoFactory() 16 17 return new UserInfoDAL(); 18 19 20
抽象工厂eg:
1 using Sam.OA.DAL.ISam; 2 3 namespace Sam.OA.DALFactory 4 5 /// <summary> 6 /// 数据库访问接口 7 /// </summary> 8 public interface IDbSession 9 10 IUserInfoDAL UserInfoDal get; 11 12 /// <summary> 13 /// 数据库访问会话层 14 /// </summary> 15 public class DbSession: IDbSession 16 17 /// <summary> 18 /// 用户信息表数据访问层 19 /// </summary> 20 public IUserInfoDAL UserInfoDal 21 get return StaticFactory.CreateUserInfoFactory(); 22 23 24
数据库访问工厂eg:
1 using System.Runtime.Remoting.Messaging; 2 3 namespace Sam.OA.DALFactory 4 5 /// <summary> 6 /// 数据库访问工厂 7 /// </summary> 8 public class DbSessionFactory 9 10 public static IDbSession GetCurrentDbSession() 11 12 //一次请求共用一个实例 13 IDbSession db = CallContext.GetData("DbSession") as IDbSession; 14 if (db==null) 15 16 db = new DbSession(); 17 CallContext.SetData("DbSession", db); 18 19 return db; 20 21 22
数据访问层静态工厂eg:
1 using Sam.OA.DAL.ISam; 2 using Sam.OA.DAL.Sam; 3 using System.Reflection; 4 5 namespace Sam.OA.DALFactory 6 7 /// <summary> 8 /// 数据访问层静态工厂 9 /// </summary> 10 public class StaticFactory 11 12 /// <summary> 13 /// 创建用户信息工厂 14 /// </summary> 15 /// <returns></returns> 16 public static IUserInfoDAL CreateUserInfoFactory() 17 18 return new UserInfoDAL(); 19 20 21
七、web.config部分
1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- 3 有关如何配置 ASP.NET 应用程序的详细信息,请访问 4 http://go.microsoft.com/fwlink/?LinkId=169433 5 --> 6 <configuration> 7 <appSettings> 8 <add key="ConnectionString" value="Server=.;uid=sa;pwd=0;database=Demo"/> 9 <add key="dbType" value="sqlserver"/> 10 <add key="PrintErrorSqlPath" value="D://error.txt"/> 11 <add key="IsPrint" value="false"/> 12 </appSettings> 13 。。。。。。。。 14 </configuration>
以上是关于面向对象编程模块内高内聚模块间低耦合数据库操作工具类的主要内容,如果未能解决你的问题,请参考以下文章