zoukankan      html  css  js  c++  java
  • [原创,分享]DbHelper 续

    一直在想怎么样才能让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、哪里有下载 点击这里

    好了,祝大家使用愉快。

  • 相关阅读:
    Oracle EBS-SQL (PO-3):检查期间手工下达的采购订单记录数.sql
    Oracle EBS-SQL (PO-2):检查当月到货补单的记录数.sql
    Oracle EBS-SQL (PO-1):检查供货比例异常.sql
    Oracle EBS-SQL (MRP-2):检查期间主计划录入记录数.sql
    Oracle EBS-SQL (MRP-1):检查期间内计划完成的任务.sql
    Oracle EBS-SQL (INV-3):检查仓库库存价值明细.sql
    Oracle EBS-SQL (INV-2):检查帐户别名发放记录.sql
    Oracle EBS-SQL (INV-1):检查物料成本为0并且物料状态不是'NEW'的物料.sql
    Oracle EBS-SQL (BOM-13):检查未定义库存分的物料类.sql
    Oracle EBS-SQL (BOM-12):BOM清单查询
  • 原文地址:https://www.cnblogs.com/goldli/p/4450236.html
Copyright © 2011-2022 走看看