[原创,分享]DbHelper 续

系统 1649 0

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

好了,祝大家使用愉快。

 

[原创,分享]DbHelper 续


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论