面向对象编程模块内高内聚模块间低耦合数据库操作工具类

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>

 

以上是关于面向对象编程模块内高内聚模块间低耦合数据库操作工具类的主要内容,如果未能解决你的问题,请参考以下文章

C#中的泛型

面向对象之低耦合,高内聚

面向对象设计之高内聚低耦合

js - 面向对象 - 小案例:轮播图随机点名选项卡鼠标拖拽

多聚合,少继承,低耦合,高内聚

Mooc软件工程-02面向对象泛型