按照NHIBERNATE使用习惯封装的SQL操作类

工作中数据层开始的时候我们是用NHIBERNATE的,后来发觉这个学习成本比较高,还有就是业务比较复杂的时候配置等各方面都比较麻烦,而且控制不好的话链接很容易爆满,后来我们该用直接用ADO.NET自己封装了一个操作类来满足这方面的需求,下面的代码是这个HELPER类的雏形。看起来都比较容易明白,所以注析就少了点。

这个类是按照NHIBERNATE的操作习惯进行封装的,该类把常用的基本操作和参数的设置以及事务等做了一次封装,因为时间关系先把这个类拷进来,具体的操作方法下次再给出来,

 

Code
  1using System;
  2using System.Collections;
  3using System.Data;
  4using System.Text;
  5using System.Text.RegularExpressions;
  6using Oracle.DataAccess;
  7using Oracle.DataAccess.Client;
  8using System.Data.SqlClient;
  9using System.Reflection;
 10
 11namespace KingCardService.Util
 12{
 13 public class DataHelper : IDisposable
 14 {
 15  枚举#region 枚举
 16  /**//// <summary>
 17  /// 数据库类型
 18  /// </summary>

 19  public enum MyDbType
 20  {
 21   ORACLE,
 22   MSSQL
 23  }

 24  #endregion

 25
 26  字段#region 字段
 27  private string _connectionString;
 28  private IDbConnection _conn = null;
 29  private IDbCommand _comm = null;
 30  private IDbTransaction _transaction = null;
 31  private CommandType _type = CommandType.Text;
 32  private MyDbType _myDbType = MyDbType.MSSQL;
 33  private ArrayList _pars = new ArrayList();
 34  private ArrayList _trancomms = new ArrayList();
 35  #endregion

 36  public DataHelper(string connectionString):this(connectionString,MyDbType.ORACLE)
 37  {
 38  }

 39  public DataHelper(string connectionString,MyDbType dbType)
 40  {
 41   _connectionString = connectionString;
 42   _myDbType = dbType;
 43   SetConnection();
 44  }

 45  private void SetConnection()
 46  {
 47   if (_conn == null)
 48   {
 49    if (_myDbType == MyDbType.ORACLE)
 50    {
 51     _conn = new OracleConnection(_connectionString);
 52    }

 53    else
 54    {
 55     _conn = new SqlConnection(_connectionString);
 56    }

 57   }

 58   if (_conn.State == ConnectionState.Closed)
 59   {
 60    _conn.Open();
 61   }

 62  }

 63  属性#region 属性
 64  /**//// <summary>
 65  /// 数据库类型
 66  /// 默认为ORACLE
 67  /// 数据库
 68  /// </summary>

 69  public MyDbType DBType
 70  {
 71   get return _myDbType; }
 72   set { _myDbType = value; }
 73  }

 74
 75  /**//// <summary>
 76  /// 获取数据库连接
 77  /// </summary>

 78  public IDbConnection Connection
 79  {
 80   get 
 81    return _conn;
 82   }

 83  }

 84  /**//// <summary>
 85  /// 事务
 86  /// </summary>

 87  public IDbTransaction Transaction
 88  {
 89   get return _transaction; }
 90  }

 91  #endregion

 92
 93  事务处理#region 事务处理
 94  /**//// <summary>
 95  /// 事务开始
 96  /// </summary>

 97  public void BeginTransaction()
 98  {
 99   if (_conn != null)
100   {
101    if (_conn.State == ConnectionState.Closed)
102     _conn.Open();
103    _transaction = _conn.BeginTransaction();
104   }

105   else
106   {
107    throw new Exception("未设置连接!");
108   }

109  }

110
111  /**//// <summary>
112  /// 事务提交
113  /// </summary>

114  public void CommitTransaction()
115  {
116   _transaction.Commit();
117   _trancomms.Clear();
118  }

119
120  /**//// <summary>
121  /// 事务回滚
122  /// </summary>

123  public void RollbackTransaction()
124  {
125   _transaction.Rollback();
126   _trancomms.Clear();
127  }

128  /**//// <summary>
129  /// IDbCommand 对象的克隆
130  /// </summary>
131  /// <param name="comm"></param>
132  /// <returns></returns>

133  private IDbCommand DeepClone(IDbCommand comm)
134  {
135   if (comm != null)
136   {
137    IDbCommand command = comm.Connection.CreateCommand();
138    command.CommandText = comm.CommandText;
139    command.CommandTimeout = comm.CommandTimeout;
140    command.CommandType = comm.CommandType;
141    foreach (IDataParameter p in comm.Parameters)
142    {
143     IDataParameter p2 = command.CreateParameter();
            p2.ParameterName = p.ParameterName;
            p2.DbType = p.DbType;
            p2.Value = p.Value;
            command.Parameters.Add(p2);

144    }

145    return command;
146   }

147   else
148   {
149    return null;
150   }

151  }

152  #endregion

153
154  创建查询#region 创建查询
155  /**//// <summary>
156  /// CreateQuery(string sql)
157  /// </summary>
158  /// <param name="sql">string sql</param>
159  /// <returns>DataHelper</returns>

160  public DataHelper CreateQuery(string sql)
161  {
162   if (_conn == null)
163    throw new Exception("请先设置数据库连接!");
164   _comm = _conn.CreateCommand();
165   _comm.CommandText = sql;
166   if(_conn.State == ConnectionState.Closed)
167    _conn.Open();
168   return this;
169  }

170
171  /**//// <summary>
172  /// CreateQuery(IDbConnection conn, string sql, CommandType commandType)
173  /// </summary>
174  /// <param name="conn">IDbConnection conn</param>
175  /// <param name="sql">string sql</param>
176  /// <param name="commandType">CommandType commandType</param>
177  /// <returns>DataHelper</returns>

178  public DataHelper CreateQuery(string sql, CommandType commandType)
179  {
180   _type = commandType;
181   return CreateQuery(sql);
182  }

183  #endregion

184
185  执行查询#region 执行查询
186  /**//// <summary>
187  /// 执行事务操作查询
188  /// </summary>
189  /// <returns>int val</returns>

190  public int ExecuteTransactionNoneQuery()
191  {
192   if (_transaction != null)
193   {
194    AddParameterToCommand();
195    IDbCommand comm = DeepClone(_comm);
196    _trancomms.Add(comm);
197    _comm.Dispose();
198    _comm = null;
199    comm.Transaction = _transaction;
200    return comm.ExecuteNonQuery();
201   }

202   else
203   {
204    throw new Exception("事务未打开!");
205   }

206  }

207
208  /**//// <summary>
209  /// ExecuteNonQuery()
210  /// Exceptions:
211  ///     System.InvalidOperationException
212  /// </summary>
213  /// <returns>int</returns>

214  public int ExecuteNonQuery()
215  {
216   AddParameterToCommand();
217   try
218   {
219    int result = _comm.ExecuteNonQuery();
220    return result;
221   }

222   catch (InvalidOperationException ex)
223   {
224    if (_conn != null && _conn.State == ConnectionState.Open)
225     _conn.Close();
226    throw ex;
227   }

228   catch (Exception ex)
229   {
230    if (_conn != null && _conn.State == ConnectionState.Open)
231     _conn.Close();
232    throw ex;
233   }

234  }

235
236  /**//// <summary>
237  /// ExecuteScalar()
238  /// </summary>
239  /// <returns>object</returns>

240  public object ExecuteScalar()
241  {
242   AddParameterToCommand();
243   try
244   {
245    object obj = _comm.ExecuteScalar();
246    return obj;
247   }

248   catch (Exception ex)
249   {
250    if(_conn.State == ConnectionState.Open)
251     _conn.Close();
252    throw ex;
253   }

254  }

255
256  /**//// <summary>
257  /// ExecuteReader()
258  /// </summary>
259  /// <returns>IDataReader</returns>

260  public IDataReader ExecuteReader()
261  {
262   AddParameterToCommand();
263   try
264   {
265    return _comm.ExecuteReader();
266   }

267   catch (Exception ex)
268   {
269    if (_conn != null && _conn.State == ConnectionState.Open)
270     _conn.Close();
271    throw ex;
272   }

273  }

274
275  /**//// <summary>
276  /// ExecuteReader(CommandBehavior commandBehavior)
277  /// </summary>
278  /// <returns>IDataReader</returns>

279  public IDataReader ExecuteReader(CommandBehavior commandBehavior)
280  {
281   AddParameterToCommand();
282   try
283   {
284    return _comm.ExecuteReader(commandBehavior);
285   }

286   catch (Exception ex)
287   {
288    if (_conn != null && _conn.State == ConnectionState.Open)
289     _conn.Close();
290    throw ex;
291   }

292  }

293  /**//// <summary>
294  /// ExecuteDataSet(MyDbType myDbType)
295  /// </summary>
296  /// <returns>DataSet</returns>

297  public DataSet ExecuteDataSet()
298  {
299   AddParameterToCommand();
300   if (_conn != null && _conn.State == ConnectionState.Open)
301    _conn.Close();
302   DataSet ds = new DataSet();
303   switch (_myDbType)
304   {
305    case MyDbType.ORACLE:
306     using(OracleDataAdapter adapter = new OracleDataAdapter((OracleCommand)_comm))
307     {
308      adapter.Fill(ds);
309     }

310     break;
311    case MyDbType.MSSQL:
312     using(SqlDataAdapter adapter = new SqlDataAdapter((SqlCommand)_comm))
313     {
314      adapter.Fill(ds);
315     }

316     break;
317   }

318   return ds;
319  }

320
321  /**//// <summary>
322  /// ExecuteDataSet(int startRecord, int maxRecords, string srcTable)
323  /// </summary>
324  /// <param name="startRecord">int startRecord</param>
325  /// <param name="maxRecords">int maxRecords</param>
326  /// <param name="srcTable">string srcTable</param>
327  /// <returns>DataSet</returns>

328  public DataSet ExecuteDataSet(int startRecord, int maxRecords, string srcTable)
329  {
330   AddParameterToCommand();
331   if (_conn != null && _conn.State == ConnectionState.Open)
332    _conn.Close();
333   DataSet ds = new DataSet();
334   switch (_myDbType)
335   {
336    case MyDbType.ORACLE:
337     using (OracleDataAdapter adapter = new OracleDataAdapter((OracleCommand)_comm))
338     {
339      adapter.Fill(ds, startRecord, maxRecords, srcTable);
340     }

341     break;
342    case MyDbType.MSSQL:
343     using (SqlDataAdapter adapter = new SqlDataAdapter((SqlCommand)_comm))
344     {
345      adapter.Fill(ds, startRecord, maxRecords, srcTable);
346     }

347     break;
348   }

349   return ds;
350  }

351
352  #endregion

353
354  设置参数#region 设置参数
355  /**//// <summary>
356  /// 将设置好的参数加到Command中去
357  /// </summary>

358  private void AddParameterToCommand()
359  {
360   _comm.Parameters.Clear();
361   if(_type == CommandType.StoredProcedure)
362   {
363    foreach(IDataParameter p in _pars)
364    {
365     _comm.Parameters.Add(p);
366    }

367   }

368   else
369   {
370    string sql = _comm.CommandText;
371    string spliter = _myDbType == MyDbType.MSSQL ? "@" : ":";
372    string pattern = string.Format(@"{0}\w+", spliter);
373    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, RegexOptions.IgnoreCase);
374    MatchCollection col = reg.Matches(sql);
375    foreach(Match item in col)
376    {
377     string val = item.Value.ToLower();
378     foreach(IDataParameter p in _pars)
379     {
380      if(p.ParameterName.ToLower() == val && !_comm.Parameters.Contains(val))
381      {
382       _comm.Parameters.Add(p);
383       break;
384      }

385     }

386    }

387   }

388   _pars.Clear();
389  }

390
391  /**//// <summary>
392  /// 设置参数
393  /// </summary>
394  /// <param name="name"></param>
395  /// <param name="dbType"></param>
396  /// <param name="value"></param>
397  /// <returns></returns>

398  private IDataParameter AddParameter(string name, DbType dbType, object value)
399  {
400   if (_comm != null)
401   {
402    IDataParameter p = _comm.CreateParameter();
403    p.ParameterName = _myDbType.Equals(MyDbType.MSSQL) ? string.Format("@{0}", name) : string.Format(":{0}", name);
404    p.DbType = dbType;
405    p.Value = value;
406    _pars.Add(p);
407    return p;
408   }

409   else
410   {
411    throw new Exception("IDbCommand对象为空!");
412   }

413  }

414
415  /**//// <summary>
416  /// 设置参数
417  /// </summary>
418  /// <param name="name"></param>
419  /// <param name="dbType"></param>
420  /// <param name="value"></param>
421  /// <returns></returns>

422  private IDataParameter AddParameter(string name, DbType dbType, object value, ParameterDirection parameterDirection)
423  {
424   IDataParameter p = AddParameter(name, dbType, value);
425   if(_type == CommandType.StoredProcedure)
426   {
427    p.Direction = parameterDirection;
428   }

429   return p;
430  }

431
432  /**//// <summary>
433  /// SetString(string name, string val)
434  /// </summary>
435  /// <param name="name">string name</param>
436  /// <param name="val">string val</param>
437  /// <returns>DataHelper</returns>

438  public DataHelper SetString(string name, string val)
439  {
440   AddParameter(name, DbType.String, (val == null ? string.Empty : val));
441   return this;
442  }

443
444  /**//// <summary>
445  /// SetString(string name, string val, ParameterDirection parameterDirection)
446  /// </summary>
447  /// <param name="name">string name</param>
448  /// <param name="val">string val</param>
449  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
450  /// <returns>DataHelper</returns>

451  public DataHelper SetString(string name, string val, ParameterDirection parameterDirection)
452  {
453   AddParameter(name, DbType.String, val, parameterDirection);
454   return this;
455  }

456
457  public DataHelper SetDouble(string name, double val)
458  {
459   AddParameter(name, DbType.Double, val);
460   return this;
461  }

462
463  public DataHelper SetDouble(string name, double val, ParameterDirection parameterDirection)
464  {
465   AddParameter(name, DbType.Double, parameterDirection);
466   return this;
467  }

468
469  public DataHelper SetDecimal(string name, decimal val)
470  {
471   AddParameter(name, DbType.Decimal, val);
472   return this;
473  }

474
475  public DataHelper SetDecimal(string name, decimal val, ParameterDirection parameterDirection)
476  {
477   AddParameter(name, DbType.Decimal, val, parameterDirection);
478   return this;
479  }

480
481  /**//// <summary>
482  /// SetInt32(string name, Int32 val)
483  /// </summary>
484  /// <param name="name">string name</param>
485  /// <param name="val">Int32 val</param>
486  /// <returns>DataHelper</returns>

487  public DataHelper SetInt32(string name, Int32 val)
488  {
489   AddParameter(name, DbType.Int32, val);
490   return this;
491  }

492
493  /**//// <summary>
494  /// SetInt32(string name, Int32 val, ParameterDirection parameterDirection)
495  /// </summary>
496  /// <param name="name">string name</param>
497  /// <param name="val">Int32 va</param>
498  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
499  /// <returns>DataHelper</returns>

500  public DataHelper SetInt32(string name, Int32 val, ParameterDirection parameterDirection)
501  {
502   AddParameter(name, DbType.Int32, val, parameterDirection);
503   return this;
504  }

505
506  /**//// <summary>
507  /// SetInt16(string name, Int16 val)
508  /// </summary>
509  /// <param name="name">string name</param>
510  /// <param name="val">Int16 val</param>
511  /// <returns>DataHelper</returns>

512  public DataHelper SetInt16(string name, Int16 val)
513  {
514   AddParameter(name, DbType.Int16, val);
515   return this;
516  }

517
518  /**//// <summary>
519  /// SetInt16(string name, Int16 val, ParameterDirection parameterDirection)
520  /// </summary>
521  /// <param name="name">string name</param>
522  /// <param name="val">Int16 val</param>
523  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
524  /// <returns>DataHelper</returns>

525  public DataHelper SetInt16(string name, Int16 val, ParameterDirection parameterDirection)
526  {
527   AddParameter(name, DbType.Int16, val, parameterDirection);
528   return this;
529  }

530
531  /**//// <summary>
532  /// SetDate(string name, DateTime val)
533  /// </summary>
534  /// <param name="name">string name</param>
535  /// <param name="val">DateTime val</param>
536  /// <returns>DataHelper</returns>

537  public DataHelper SetDate(string name, DateTime val)
538  {
539   AddParameter(name, DbType.Date, val);
540   return this;
541  }

542
543  /**//// <summary>
544  /// SetDate(string name, DateTime val, ParameterDirection parameterDirection)
545  /// </summary>
546  /// <param name="name">string name</param>
547  /// <param name="val">DateTime val</param>
548  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
549  /// <returns>DataHelper</returns>

550  public DataHelper SetDate(string name, DateTime val, ParameterDirection parameterDirection)
551  {
552   AddParameter(name, DbType.Date, val, parameterDirection);
553   return this;
554  }

555
556  /**//// <summary>
557  /// SetDateTime(string name, DateTime val)
558  /// </summary>
559  /// <param name="name">string name</param>
560  /// <param name="val">DateTime val</param>
561  /// <returns>DataHelper</returns>

562  public DataHelper SetDateTime(string name, DateTime val)
563  {
564   AddParameter(name, DbType.DateTime, val);
565   return this;
566  }

567
568  /**//// <summary>
569  /// SetDateTime(string name, DateTime val, ParameterDirection parameterDirection)
570  /// </summary>
571  /// <param name="name">string name</param>
572  /// <param name="val">DateTime val</param>
573  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
574  /// <returns>DataHelper</returns>

575  public DataHelper SetDateTime(string name, DateTime val, ParameterDirection parameterDirection)
576  {
577   AddParameter(name, DbType.DateTime, val, parameterDirection);
578   return this;
579  }

580
581  /**//// <summary>
582  /// SetEnum(string name, Enum val)
583  /// </summary>
584  /// <param name="name">string name</param>
585  /// <param name="val">Enum val</param>
586  /// <returns>DataHelper</returns>

587  public DataHelper SetEnum(string name, Enum val)
588  {
589   AddParameter(name, DbType.Int32, val.GetHashCode());
590   return this;
591  }

592
593  /**//// <summary>
594  /// SetEnum(string name, Enum val, ParameterDirection parameterDirection)
595  /// </summary>
596  /// <param name="name">string name</param>
597  /// <param name="val">Enum val</param>
598  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
599  /// <returns>DataHelper</returns>

600  public DataHelper SetEnum(string name, Enum val, ParameterDirection parameterDirection)
601  {
602   AddParameter(name, DbType.Int32, val.GetHashCode(), parameterDirection);
603   return this;
604  }

605
606  /**//// <summary>
607  /// SetEnum(string name, bool val)
608  /// </summary>
609  /// <param name="name">string name</param>
610  /// <param name="val">bool val</param>
611  /// <returns>DataHelper</returns>

612  public DataHelper SetBoolean(string name, bool val)
613  {
614   AddParameter(name, DbType.Byte, (val ? 1 : 0));
615   return this;
616  }

617
618  /**//// <summary>
619  /// SetEnum(string name, bool val, ParameterDirection parameterDirection)
620  /// </summary>
621  /// <param name="name">string name</param>
622  /// <param name="val">bool val</param>
623  /// <param name="parameterDirection">ParameterDirection parameterDirection</param>
624  /// <returns>DataHelper</returns>

625  public DataHelper SetBoolean(string name, bool val, ParameterDirection parameterDirection)
626  {
627   AddParameter(name, DbType.Byte, (val ? 1 : 0), parameterDirection);
628   return this;
629  }

630  #endregion

631
632  IDisposable 成员#region IDisposable 成员
633
634  public void Dispose()
635  {
636   if(_comm != null)
637    _comm.Dispose();
638   if (_trancomms != null)
639   {
640    for (int i = 0; i < _trancomms.Count; i++)
641    {
642     if((IDbCommand)_trancomms[i] != null)
643      ((IDbCommand)_trancomms[i]).Dispose();
644    }

645   }

646
647   if(_conn != null)
648    _conn.Dispose();
649  }

650
651  #endregion

652 }

653}

654
655

转载于:https://www.cnblogs.com/strayromeo/archive/2008/12/09/1351461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值