你的位置:首页 > 软件开发 > ASP.net > 我也来写:数据库访问类DBHelper

我也来写:数据库访问类DBHelper

发布时间:2015-09-10 12:00:03
一、前言  相信许多人都百度过:“.net 数据库访问类”。然后就出来一大堆SqlHelper。我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以很好的工作。ADO.NET已经封装很好 ...

一、前言

  相信许多人都百度过:“.net 数据库访问类”。然后就出来一大堆SqlHelper。我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以很好的工作。ADO.NET已经封装很好了,我们很容易就可以实现自己的数据库访问类。

  很久前,忘记在哪里看到过了,有一个朋友写了一篇【如何做一个好用的数据库访问类】(有兴趣的朋友仍然可以搜索到),这篇文章确实写得很好,作者很详细的讲解了如何设计一个好的数据库访问类;所谓“好“是指:轻量、易用、通用、高效。

  其实代码是很久前就实现了,只是现在才总结记录,希望可以分享一下学习的过程。ok,在开始前先来看几个ADO.NET常见的面试题:

1. ADO.NET 5个核心对象是哪5个?

2. 与ADO.NET 相关对象中,哪些可以用于数据绑定?

3. DataSet与DataReader有什么区别?分别适用在什么情况?

二、需求

  这是一个简单的、基于ADO.NET的数据库访问类,它最起码要具备以下特点:  

1. 支持多种数据库

  搞.net的视乎有一个固定的思维:数据库就是用sql server。额,只是很多用sql server,但不是全部,也有很多用 my sql 等的。我们并不能限制一定用什么数据库。

2. 支持多个数据库

  有时候我们的应用程序会用到多个数据库,并且这些数据库还不是部署在同一台服务器上的。

3. 简单

  满足常见的操作。

4. 可扩展

  可以随时增加新的方法;对于具体的数据源,也可以有特有的操作。

三、主要说明

3.1 使用DbProviderFactory

  既然要支持多种数据库,那么我们之前常写的SqlConnection、SqlCommand 就都不能用了,因为它们是针对sql server 数据源的。如果换成 my sql 就是 MySqlConnection, Oracle 就是 OracleConnection 了。

  既然有那么多种Connection,很多朋友可能会想到通过设计模式来处理,例如定义一个父类(或接口),然后各种类型的数据库继承它,然后再通过一个工厂,来创建所需要的对象;以后要增加哪种类型的数据库就再增加一个对应的类就可以了。大概是像下面这样:

  public abstract class DBHelper  {    public abstract void Open(get='_blank'>string key){}    public abstract int ExecuteNonQuery() { }    public abstract object ExecuteScalar() { }    public abstract DataSet GetDataSet() { }  }  public class SqlHelper : DBHelper  {    const char _prefix = '@';    //实现抽象方法...  }  public class MySqlHelper : DBHelper  {    const char _prefix = "@";    //实现抽象方法...  }  public class OracleHelper : DBHelper  {    const char _prefix = ":";    //实现抽象方法...  }  public class DBFactory  {    public static DBHelper GetDBHelper()    {      //根据条件返回DBHelper    }  }

原标题:我也来写:数据库访问类DBHelper

关键词:数据库

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。