[原创,分享]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 == ) 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('').PadLeft(, ''));
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();
AddParameter<OracleParameter>("xIds").SetValue("");
AddParameter<OracleParameter>("xDay").SetValue(time.AddDays(-));
AddParameter<OracleParameter>("xCmt").SetValue();
Lock();
ExecuteNonQuery();
UnLock();
}
5、说明
发布版本已经去掉对CommanText的直接赋值方法,改为Prepare(.....)来进行
6、哪里有下载 点击这里
好了,祝大家使用愉快。
[原创,分享]DbHelper 续的更多相关文章
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- [置顶] 【原创分享】嵌入式linux应用之内核移植定制篇-前篇(linux-3.8.12 mini2440)--20130824
移植的话其实很早就做过了,不过那时用的友善定制的老版本2.6.32 驱动什么的全部弄好了,仅仅用默认配置而已.基本不用改动什么,很简单. 内核更新其实非常的快,今天我就用个3.8.12来移植. 当然, ...
- 微信团队原创分享:iOS版微信的内存监控系统技术实践
本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...
- Android无线开发的几种常用技术(阿里巴巴资深工程师原创分享)
完整的开发一个android移动App需要经过从分解需求.架构设计到开发调试.测试.上线发布等多个阶段,在发布后还会有产品功能上的迭代演进,此外还会面对性能.安全.无线网络质量等多方面的问题. 移动A ...
- 原创:分享asp.net伪静态成目录形式iis如何设置
服务器租用详解asp.net伪静态成目录形式iis如何设置: 一.首先介绍一下asp.net伪静态成html后缀iis如何设置的 iis6 伪静态 iis配置方法 图解 1.右键点击 要设置网站的网站 ...
随机推荐
- webdriver(python)学习笔记二
自己开始一个脚本开始学习: # coding = utf-8 from selenium import webdriver browser = webdriver.Firefox() browser. ...
- hdu 2594-Simpsons’ Hidden Talents(KMP)
题意: 给你两个串a,b,求既是a的前缀又是b的后缀的最长子串的长度. 分析: 很自然的想到把两个串连接起来,根据KMP的性质求即可 #include <map> #include < ...
- HDU 4911 Inversion
http://acm.hdu.edu.cn/showproblem.php?pid=4911 归并排序求逆对数. Inversion Time Limit: 2000/1000 MS (Java/ ...
- Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- Ubuntu 12.04中文输入法的安装
Ubuntu 12.04中文输入法的安装 Ubuntu上的输入法主要有小小输入平台(支持拼音/二笔/五笔等),Fcitx,Ibus,Scim等.其中Scim和Ibus是输入法框架. 在Ubuntu ...
- ASP.NET性能优化小结(ASP.NET&C#)
ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库 ...
- sql联接那点儿事儿
1.交叉联接(cross join) select * from t.toy ,b.boy from toy as t cross join boy as b 其效果同select * from t. ...
- bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2818 [题意] 问(x,y)为质数的有序点对的数目. [思路一] 定义f[i]表示i之 ...
- linux 切换c++版本
删除gcc-4.6的软连接文件/usr/bin/gcc.(只是删除软连接) 命令:sudo rm /usr/bin/gcc 然后建一个软连接,指向gcc-4.4. 命令:sudo ln -s /usr ...
- 激活Windows 10
激活Windows 10按 win+X 组合键,打开“命令提示符(管理员)”,输入以下代码:slmgr /ipk NKJFK-GPHP7-G8C3J-P6JXR-HQRJR 然后按Enter键回车即 ...