今天看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. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  2. Redis修改数据多线程并发—Redis并发锁

    本文版权归博客园和作者本人吴双共同所有 .转载爬虫请注明地址,博客园蜗牛 http://www.cnblogs.com/tdws/p/5712835.html 蜗牛Redis系列文章目录http:// ...

  3. jquery 和 css 属性

    offset()获取标签离左上角的位置,离顶部和左部的距离.离整个屏幕的左上角的距离. position() 相对于某一个标签的位置.离父标签的距离.离父标签的左上角的距离. height(), wi ...

  4. c中使用gets() 提示warning: this program uses gets(), which is unsafe.

    今天在C代码中使用gets()时提示“warning: this program uses gets(), which is unsafe.”,然后这个程序还能运行,无聊的我开始查阅资料,为啥gets ...

  5. jquery图片播放切换插件

    点击这里查看效果可自定义数字样式和左右点击按钮 这个更好:移入按钮切换版本 更多图片轮播 以下是HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  6. 使用C#类向数据库添加数据的例子源码

    在上一篇中,增加了sql server数据库操作类SqlOperator,用于操作sql server数据库.还有一个SqlStringHelper类,用于处理sql语句的单引号.那么这两个类怎么使用 ...

  7. 移动页面div居中效果代码

    在线查看效果:http://hovertree.com/texiao/mobile/4.htm 可用手机浏览器查看 以下为HTML文件: <!DOCTYPE html> <html& ...

  8. input标签内容改变的触发事件

    ---恢复内容开始--- 1. onchange事件与onpropertychange事件的区别: onchange事件在内容改变(两次内容有可能相等)且失去焦点时触发:onpropertychang ...

  9. 一次部署HTTPS的相关事件引发的思考

    前言: 上周五快要下班的时候,突然收到通知客户希望了解一下部署HTTPS的流程,这种事情谁听了都会有几分诧异的.因为这件事虽然和工作有一定的相关度,但平时不会走这个方向,实际上也较少接触.此外,客户手 ...

  10. FIJ Jobs - 150316

    Department Vacancies Total Skill Set Experience Language Oracle; OBIEE 3years English Systems Sr. So ...