今天看DevDemo源码时候看到一个写得很好的SQLHelper

代码

  public class SqlHelper<T, Command>
where T : DbConnection
where Command : DbCommand, new() {
public object ReadValue(T connection, string selectQuery, params DbParameter[] pars) {
using(var sql = CreateCommand(selectQuery, connection)) {
sql.CommandTimeout = ;
if(pars != null)
sql.Parameters.AddRange(pars);
try {
return CheckDbNull(sql.ExecuteScalar());
}
catch { return null; }
}
}
object CheckDbNull(object value) {
if(value == null) return null;
if(Object.ReferenceEquals(value, DBNull.Value)) return null;
return value;
}
static DbCommand CreateCommand(string selectQuery, T connection) {
return new Command() { CommandText = selectQuery, Connection = connection };
}
public List<object[]> ReadValues(T connection, string selectQuery, params DbParameter[] pars) {
List<object[]> res = new List<object[]>();
try {
using(var sql = CreateCommand(selectQuery, connection)) {
sql.CommandTimeout = ;
if(pars != null) sql.Parameters.AddRange(pars);
using(DbDataReader reader = sql.ExecuteReader()) {
if(!reader.HasRows) return res;
while(reader.Read()) {
object[] values = new object[reader.FieldCount];
reader.GetValues(values);
res.Add(values);
}
}
}
}
catch { }
return res;
}
public string GetString(object val) {
if(val == DBNull.Value || val == null) return string.Empty;
return val.ToString();
}
public DateTime GetDateInv(object val) {
if(val == DBNull.Value || val == null) return DateTime.MinValue;
return DateTime.ParseExact(val.ToString(), "d/M/yyyy", DateTimeFormatInfo.InvariantInfo);
}
public int GetInt(object val) {
if(val == DBNull.Value || val == null) return ;
return Convert.ToInt32(val);
}
public DateTime GetDate(object value) {
if(value == null || value == DBNull.Value) return DateTime.MinValue;
if(value is DateTime) return (DateTime)value;
return GetDateInv(value);
}
public decimal GetDecimal(object value) {
if(value == null || value == DBNull.Value) return ;
return (decimal)Convert.ChangeType(value, typeof(decimal));
}
public Guid GetGuid(object value) {
if(value == null || value == DBNull.Value) return Guid.Empty;
return new Guid(value.ToString());
}
public bool GetBool(object value) {
if(value == null || value == DBNull.Value) return false;
if(value is bool) return (bool)value;
if(value is int) return (int)value == ;
return false;
}
}
   using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
//new OleDbCommand("delete * from sales", connection).ExecuteNonQuery(); //FOR TEST PURPOSES
var helper = new SqlHelper<OleDbConnection, OleDbCommand>();
DateTime minDate = helper.GetDate(helper.ReadValue(connection, "select min(sale_date) from sales"));
DateTime maxDate = helper.GetDate(helper.ReadValue(connection, "select max(sale_date) from sales"));
this.maxId = helper.GetInt(helper.ReadValue(connection, "select max(id) from sales"));
DateTime startDate = minRequiredDate;
if (minDate > startDate && maxDate != DateTime.MinValue)
{
startDate = maxDate.AddDays();
}
if (startDate > DateTime.Today.AddDays())
return true;
double daysCount = currentDate.Subtract(startDate).TotalDays;
RaiseStart();
try { Generate(connection, startDate, (int)daysCount); }
finally { RaiseComplete(); }
connection.Close();
}

【2016-11-15】【坚持学习】【Day26】【通用的SQLHelper】的更多相关文章

  1. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...

  2. 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理

    2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...

  3. 微信iphone7、 ios10播放视频解决方案 2016.11.10

    2016.11.10日更新以下方法 微信最新出同层播放规范 即使是官方的也无法解决所有android手机的问题. 另外iphone 5 .5s 某些手机始终会弹出播放,请继续采用 “以下是老的解决办法 ...

  4. 【转载】webstorm11(注册,激活,破解,码,一起支持正版,最新可用)(2016.11.16更新)

    很多人都发现 http://idea.lanyus.com/ 不能激活了 很多帖子说的 http://15.idea.lanyus.com/ 之类都用不了了 最近封的厉害仅作测试 选择 License ...

  5. Notes of Daily Scrum Meeting(11.15)

    Notes of Daily Scrum Meeting(11.15) 今天周六我们的主要工作是把这周落下的一些工作补回来,这是写程序的最后阶段,准备进入测试阶段了,所以之前的工作 要补齐,今天大家的 ...

  6. 11.15 Daily Scrum

    今天是假期回来的第一个周末,也是我们团队的又一次进度汇总总结和调试工作开展,鉴于一周以来大家的工作有了很大的成果,所以,本次召开的会议主旨在于解决一些开发方面的细节问题,达成共识,为日后进一步的功能方 ...

  7. 2016/11/10 吃吃喝喝Hacking Thursday Night聚餐活动 at Dunkin Donuts

    店名:Dunkin Donuts 唐恩都乐 点评:http://www.dianping.com/shop/21378231 地址:静安区南京西路1649号静安公园内(近静安公园) 走法:地铁2号线静 ...

  8. Sprint1(第二天11.15)

    Sprint1(第二天11.15) Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:web版-餐厅到店点餐系统 4.团队博客地址: http:// ...

  9. HTML5初学者福利!11个在线学习网站推荐

    HTML5初学者福利!11个在线学习网站推荐 HTML5的强大及流行趋势,让更多的人想要系统的对它进行学习.而大多数人获取HTML5知识的重要途径都是网络,不过面对五花八门的搜索结果,是不是觉得摸不着 ...

  10. 最新的 cocoapods 安装与使用(2016.11)

    cocoapods简介: cocoapods 是iOS的类库管理工具,可以让开发者很方便集成各种第三方库,而不用去网站上一个个下载,再一个个文件夹的拖进项目中,还得添加相关的系统依赖库.只需要安装好c ...

随机推荐

  1. 【NopCommerce源码架构学习-二】单例模式实现代码分析

    单例模式是是常用经典十几种设计模式中最简单的..NET中单例模式的实现也有很多种方式.下面我来介绍一下NopCommerce中单例模式实现. 我之前的文章就分析了一下nop中EngineContext ...

  2. Java基础学习 -- 异常

    当异常发生时,原本要接着执行的代码不再执行,转而让其他部分的代码来处理.如果没有代码负责处理,控制台会报告异常. 异常出现时的执行机制: 异常机制最大的好处是:清晰地分开了 正常的业务逻辑 和 遇到情 ...

  3. ASP.NET Mvc实用框架(一)Ioc、仓储模式和单元工作模式

    Framework.EF 首先看一下这个类库: Extended文件夹存放的是EntityFramework.Extensions这个插件的源代码,没有别的原因,就是本人觉得这个插件挺好的,每次省的下 ...

  4. js 阻止事件冒泡和默认行为 preventDefault、stopPropagation、return false

    preventDefault: preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为.既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就 ...

  5. SuperMap iServer 扩展服务及扩展服务提供者范例

    一.扩展服务实例 1.将iserver-extend1下的listener.java打成jar包2.复制到D:\SuperMap-iServer\webapps\iserver\WEB-INF\lib ...

  6. tabbarItem字体及图片颜色设置

    tabbarItem设置图片后运行往往与我们原始图片颜色有出入,这是因为在默认情况下,未选中状态图片和字体颜色为灰色,选中状态下图片和字体颜色为蓝色.   UIImage 在呈现(render)时会选 ...

  7. iOS 开发之路(WKWebView内嵌HTML5之图片上传) 五

    HTML5页面的图片上传功能在iOS端的实现. 首先,页面上用的是plupload组件,在wkwebview上存在两个坑需要修复才能正常使用. 问题:在webview上点击选择照片/相机拍摄,就会出现 ...

  8. 【原】Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)

    更新日志 V1.2 2015.09.25 1.UITabBarItem badge is supproted; 2.Enable change badge properties when badge ...

  9. python之(re)正则表达式下

    知识储备: \w 匹配任何字母/数字,下划线 正则表达式进阶: re.match('com', 'comwww.runcomoob') re.search('\dcom', 'www.4comruno ...

  10. ORACLE会话连接进程三者总结

    概念介绍 通俗来讲,会话(Session) 是通信双方从开始通信到通信结束期间的一个上下文(Context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户 ...