标签:
一直在想怎么样才能让dbHelper更简单,更灵活,更僵化。终于我发布了第一个开源版本的dbhelper.此helper将使用System.Data.DbHelper作为命名空间。采用内部驱动与内容Session的方式来进行管理。而作为使用者,你只需要作两件事情。1、注册一个驱动;2、继承Dal创建自己的数据处理层。Dbhelper在进行事务操作时需要使用Lock来开启事务;Unlock提交事务。当出错时自动进行事务回滚(获立事务的Dal除外)。多个Dal可以通过Group()方法将事务进行统一(即使驱动不同)。若存在多层嵌套关系,且每个Dal都有Lock,那么事务以最外层的为准。
调用方法很简单
1、注册驱动
DbService.Instance.RegistDriver("sql", config.Sql, typeof (SqlHelper)); DbService.Instance.RegistDriver("oracle", config.Oracle, typeof(MsOracleHelper));
2、普通查询
public DataTable GetSource(DateTime time) { var sql = new StringBuilder() .Append(" select checktime,sn_name,badgenumber ") .Append(" FROM checkinout c") .Append(" LEFT join userinfo u") .Append(" ON c.userid = u.userid") .AppendFormat(" WHERE CONVERT(VARCHAR(10),c.checktime,23)= ‘{0}‘", time.ToString("yyyy-MM-dd")); CommandText = sql.ToString(); return GetDataTable(); }
3、参数化提交
public bool SyncCardPress(DataTable source,DateTime time) { if (source == null || source.Rows.Count == 0) return true; Lock(); var d = time.ToString("yyyy-MM-dd"); CommandText = string.Format("delete FROM TB_ROLL_RECORD r WHERE to_char(r.presstime,‘yyyy-mm-dd‘) = ‘{0}‘",d); ExecuteNonQuery(); CommandText = "INSERT INTO TB_ROLL_RECORD VALUES(:userId,:machine,to_date(:pressTime,‘yyyy-mm-dd hh24:mi:ss‘),sysdate)"; var userId = AddParameter<OracleParameter>("userid"); var machine = AddParameter<OracleParameter>("machine"); var presstime = AddParameter<OracleParameter>("pressTime"); foreach (DataRow row in source.Rows) { userId.SetValue(row.To<string>("badgenumber").TrimStart(‘0‘).PadLeft(4, ‘0‘)); machine.SetValue(row.To<string>("sn_name")); presstime.SetValue(row.To<DateTime>("checktime").ToDateTimeString()); ExecuteNonQuery(); if (!Success) { Debug.WriteLine(Error.Message); break; } } UnLock(); return Success; }
4、使用存储过程
public void Calc(DateTime time) { CommandText = "CalcAttendanceByDay"; CommandType = CommandType.StoredProcedure; AddParameter<OracleParameter>("xType").SetValue(1); AddParameter<OracleParameter>("xIds").SetValue(""); AddParameter<OracleParameter>("xDay").SetValue(time.AddDays(-1)); AddParameter<OracleParameter>("xCmt").SetValue(1); Lock(); ExecuteNonQuery(); UnLock(); }
5、说明
发布版本已经去掉对CommanText的直接赋值方法,改为Prepare(.....)来进行
6、哪里有下载 点击这里
好了,祝大家使用愉快。
标签:
原文地址:http://www.cnblogs.com/goldli/p/4450236.html