今天看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# 洗牌算法

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   C#洗牌算法如下: class Program { ...

  2. sqlHelper做增删改查,SQL注入处理,存储值,cookie,session

    一.存储值 eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来] 存储值得方式有两种,一种是cookie,一种是session 1.1区别: 代码: if ...

  3. ffmpeg实现dxva2硬件加速

    这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...

  4. Java中从键盘中任意输入字符串,将其转换成数字后,并求和

  5. git的诞生

    Git的诞生   很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世 ...

  6. iOS隐私政策

    隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...

  7. jQuery:详解jQuery中的事件(一)

    之前用过一些jQuery的动画和特效,但是用到的部分也不超过10%的样子,感觉好浪费啊——当然浪费的不是jQuery,而是Web资源.后来就想深入研究下jQuery的内部机理,读过两遍jQuery源代 ...

  8. Storm的BaseBasicBolt源码解析ack机制

    我们在学习ack机制的时候,我们知道Storm的Bolt有BaseBasicBolt和BaseRichBolt.在BaseBasicBolt中,BasicOutputCollector在emit数据的 ...

  9. jquery简介和实例

    一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. 参考:http://www.php100 ...

  10. Autodesk正在招聘Civil、Infraworks金牌支持工程师(Premium Support Specialist)

    Civil Infraworks金牌支持工程师,也不知道中文这么翻对不对,反正很牛的,地点优选上海,不过其他地区也没问题啊,感兴趣的,赶紧扔简历过来,我当你内线,帮你内推 :) Autodesk是全球 ...