自己编写的数据访问类(C#)--第一篇
作者/天才 时间/2006-1-10 17:08:00 类别/开发技术 查看/
 发表评论 以论坛方式查看
标签:.Net联盟
作者:黄润成


数据访问类设计及使用说明

一、设计目标:
1、 提供方便、快速的数据库访问方法,减少项目开发的代码量。
2、 屏蔽不同数据库之间的差异,连接不同类型的数据库使用相同的类和调用相同的方法。
3、 提供数据库事务管理功能。


二、设计思路:
1、 对ADO.Net组件进行封装,屏蔽创建数据库连接对象、数据查询对象等操作,提供调用类的静态方法的方式来执行读写数据库的操作。

2、 定义数据服务接口:IDbService,以统一的接口方法来提供对应不同类型的数据库操作服务。不同的数据访问类都必须实现此接口;

3、 定义访问SQL Server数据库的数据服务类SqlDbService,该类实现前面定义的数据服务接口:IDbService,并封装ADO.Net访问SQL Server的组件(System.Data.SqlClient命名空间中的类)来提供服务;

4、 定义访问其他类型数据库(如Oracle或Access)的数据服务类OleDbService,同样该类实现前面定义的数据服务接口IDbService,并封装ADO.Net中的数据访问组件(System.Data.OleDb命名空间里的类)来提供服务;

5、 定义DbService类,该类实现了一组静态的数据库操作方法,并且维护一个数据服务类对象池。静态的数据访问方法通过对引用的IDbService接口的调来实现数据访问,而对接口IDbService的调用实际上是调用SqlDbService或OleDbService类的实例对象。

6、 IDbService接口、SqlDbService类、OleDbService类和DbService类的关系如图-1所示。

7、 从图-1中可以看出,SqlDbService类和OleDbService类都实现了IDbService接口,并按照IDbService接口的定义向处提供服务。而DbService类则包含对IDbService接口类型的引用,该引用的实体可由SqlDbService或OleDbService类实例对象提供。

8、 另外,为了方便管理执行数据库操作所需要的参数,定义了一个辅助类:DbParams,该类中使用了一个ArrayList对象来维护参数列表并实现了IEnumerable接口。

9、 最后,为了在包含查询结果的SqlDataReader或OleDbDataReader对象关闭时能执行用户自定义的代码,特定义了一个DataReaderWrapper类对SqlDataReader和OleDbDataReader进行封装,并在该类中定义了一个事件委托OnClose,用户可对该事件注册,当DataReaderWrapper对象调用Close()方法时将回调用户注册的事件处理代码。DataReaderWrapper类和相关接口、委托的定义和关系如图-2所示。

10、 从图-2中可以看到,DataReaderWrapper类实现了IDataReaderWrapper接口,而IDataReaderWrapper接口继承自IDataReader和IEnumerable接口并添加了ReaderCloseHandler委托类型的事件OnClose,使用户可以通过注册该事件来进行回调。而SqlDataReader和OleDbDataReader也实现了IDataReader和IEnumerable接口,因此DataReaderWrapper类通过封装SqlDataReader和OleDbDataReader类以Adapter模式来提供IDataReaderWrapper接口的服务。


图1



图2
查看该用户更多文章>>