基于.NET的通用数据访问模型的研究与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于.NET的通用数据访问模型的研究与实现
摘要:常用的应用程序对数据库的访问只限于一种特定的数据库,降低了应用程序的可扩展性和灵活性。提出了一种基于.NET 的通用数据访问模型,详细阐述了基于技术和简单工厂模式实现通用数据访问模型的设计与实现。该模型可以使应用程序在不修改代码的情况下更换后台数据库,是一种能够应用于当今主流数据库管理系统的数据访问模型。
关键词:;简单工厂模式;通用数据访问
0 引言
本文基于开发体育赛事管理信息系统遇到的现实问题,针对.NET平台,结合简单工厂模式,利用的扩充性,设计了一个基于.NET平台的通用数据访问控制模型,为实现便捷更换后台数据库提供了一个较好的解决方案,并通过一系列的实验,证明这种方案具有一定的实用价值。
1 基于.NET的通用数据访问模型的研究
用于.NET应用程序的各种数据存储之间通信。库中包含了与数据源连接、提交查询并处理结果的类。可将作为一种强壮、层次化的、断开连接的数据缓存来使用,以脱机处理数据。其中最主要的断开连接对象(数据集)可执行对数据排序、搜索、筛选、更改等操作。如图1所示,
左边的对象是“连接的”模型,这些模型直接与数据库通信,并管理连接、事务,还可从数据库中检索数据并向数据库提交所做更改。右边的对象是“断开连接的”对象,允许脱机处理数据。
构成对象模型中断开部分的对象不与连接的对象及数据库直接通信。DataAdapter对象在DataSet与源数据之间起桥梁作用。DataAdapter对象的Fill方法把数据从数据库中转入DataSet,DataAdapter对象的Update方法把存储在DataSet中的更改提交给数据库。使用了断开连接模式,服务器不需要维护与客户机之间的连接。只有当客户机需要将更新数据传回到服务器时再重新连接,这样服务器的资源消耗少,可同时支持更多并发的客户机。
基于.NET的通用数据访问的核心是技术,并应用简单工厂模式来保证其通用性,其访问示意图如图2所示。
为了达到通用目的,最好的方法是使用抽象接口,并将特定于特殊数据源的代码封装在类层中,从而使应用程序的其他部分独立于后台数据库服务器或免受其影响。只使用基本接口远不能满足通用访问数据的抽象要求。这种情况下,一个好的解决方案是提高此抽象的级别,即运用简单工厂模式创建一组类来封装特定数据提供程序的使用,并通过与特定数据源、类型化的“数据
集”、对象集合等无关的数据结构与应用程序的其他级别交换信息。
2 基于.NET的通用数据访问模型的设计
基于.NET的通用数据访问模型及其应用在设计与实现过程中主要使用了数据库访问技术和简单工厂模式。技术实现了对后台数据库的访问,简单工厂模式实现了其通用性,根据不同的后台数据库生成相应的数据库访问类。
2.1 基于.NET的通用数据访问模型的结构设计
基于.NET的通用数据访问模型主要有以下3部分构成:
①工厂类(DbClientFactory):该类是通用数据访问模型的逻辑中心,具体实现了创建所有数据库类实例的逻辑。它能够被应用程序调用,根据不同的条件创建相应的数据库类实例;②抽象数据库访问类:该类是所有数据库访问类的父类,它为所有的数据库访问子类提供了公共的统一接口,具体实现放在子类中;③具体数据库访问类:该部分包括四个具体的数据库访问类,它们均继承自上面的抽象类。每个不同的数据库访问类实现了对不同后台数据库的访问。它们分别是DbSqlObject,DbOracleObject、DbAccessObject,DbMySqlObject、实现了对SQL Server、Oracle、Access、MySql数据库的访问。
用UML类图说明了这几个类之间的关系(限于篇幅,类图中的方法均未写出参数)如图3所示。
2.2 基于.NET的通用数据访问模型的功能设计
基于.NET的通用数据访问模型主要完成的功能是对各种数据库的访问操作。这些操作包括:执行命令(删除、更新以及插入)、执行事务、查询并返回数据集或数据表、元数据管理等,如图4所示。
执行命令功能主要执行SQL语句中的插入、删除、更新、批量更新以及存储过程;执行事务功能主要完成一组需要绑定完成的操作(事务),如果成功则更新数据源,否则回滚(撤销所有操作);查询并返回功能主要为应用系统返回一行表结果以及一个或一组查询结果的数据表,供应用程序脱机或联机操作;元数据管理主要是对表的管理,如获得表的行数、获得表的列名、获得列的属性等。
3 基于.NET的通用数据访问模型的实现
3.1 工厂类的实现
工厂类主要针对不同的数据源返回不同的数据对象,供应用程序使用。其代码如下:
public class DbClientFactory
{
public static DbClient GetDBOperator(string strConnection,string DbName)
{//连接字符串和数据库类型可以从配置文件中读取
switch (DbName)
{
case "SqlServer": //访问SqlServer数据库的类
return new DbSqlObject(strConnection); break;
case "Oracle": //访问Oracle数据库的类
return new DbOracleObject(strConnection); break;
case "MySql": //访问MySql数据库的类
return new DbMySqlObject(strConnection); break;
case "Access": //访问Access数据库的类
return new DbAccessObject(strConnection); break;
default :
return null;
}
}
}
3.2 抽象数据访问类的实现
抽象数据访问类是所有具体数据访问对象的父类,具体负责描述所有数据访问实例所共有的公共接口。其代码如下:
public abstract class DbClient
{
protected abstract void OpenConnection (); //打开连接