今天看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. C#图片加水印实例与代码

    本文要提供的类可以为图片加文字水印,以及判断是否是图片文件.经过测试可运行,例子请下载:http://hovertree.com/h/bjaf/5qc5eh6y.htm 例子效果图: 以下是Hover ...

  2. sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )

    通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...

  3. 第一个hadoop 程序

    首先检查hadoop是否安装并配置正确然后建立WordCount.java文件里面保存package org.myorg; import java.io.IOException;import java ...

  4. 回溯法求n的全排列

    代码如下: #include <iostream> #include <algorithm> #include <stdio.h> #include <cst ...

  5. C标准头文件<string.h>

    里面主要包含了一些与字符串关联的函数的声明,这些函数有如下的命名规则: 以"mem"开头的函数操作任意的字符序列 以"strn"开头的函数操作非空字符序列 以& ...

  6. ProxyPattern

    代理模式是aop编程的基础,其主要作用是操作对象,并将你需要的新功能切入若干个你想要的切入点,静态代理模式比较简单,但是缺点比较大,这里就不上代码了,下面写上动态代理模式的代码(jdk方式,而不是采用 ...

  7. 变通实现微服务的per request以提高IO效率(三)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  8. Netty(四)分隔符与定长解码器的使用

    TCP以流的形式进行数据传输,上层的应用协议为了对消息进行划分,往往采用如下的4种方式. (1)消息长度固定,累计读到长度总和为定长len的报文后,就认为读取到了一个完整的消息:然后重新开始读取下一个 ...

  9. jqGrid几个需要注意的默认设置

    jqGrid中的option属性设置中,几乎每个属性都会给出默认值,然而,有些默认值实在有些坑爹,导致在使用过程中,如果没有注意到而使用了默认值,就会出现一些问题. height:是指jqGrid表格 ...

  10. 【JavaScript】详解JSON

    目录结构: // contents structure [-] 什么是JSON JSON和XML的比较 相同点 不同点 JSON语法 如何解析JSON文本 eval()方法 JSON.parse()方 ...