基于.NET环境的数据访问层的设计与实现

2009-06-29 05:03高丙云
中国高新技术企业 2009年10期

摘要:文章探讨了利用ADO.NET技术和Microsoft.NET环境设计数据访问层的方法,使用VB.NET语言和.NET的集成开发环境(IDE),创建数据访问组件,实现数据访问层的实例,介绍了在应用程序中调用数据访问层的方法。

关键词:.NET环境;数据访问层;ADO.NET技术;数据访问组件;DAL

中图分类号:TP311文献标识码:A文章编号:1009-2374(2009)10-0014-03

每一个应用软件与数据库之间都会用到一些数据访问技术,在.Net中,对于SQL Server和其他数据库(支持OleDb),采用不同的访问方法,这些访问方法以组件类的形式存在,分别分布于System.Data.SqlClient和System.Data.OleDb名称空间中。微软后来又推出了专门用于访问Oracle数据库的类库。

在应用程序的设计中,数据库的访问非常重要。为了统一对数据的访问方式,我们在设计的时候,可以在框架的类库中包含数据访问服务,封装常用的对数据库的各种操作,这样,在具体软件系统开发的时候,能够尽量做到数据库无关,大大简化了开发和部署工作。这种在实际开发过程中将数据库访问方法设计成组件或类进行封装,并形成一个独立的层次,称之为数据访问层,简称为DAL(Data Access Layer)。本文是在

.NET环境下,以VB.NET语言访问WEB数据库为例,详细阐述了数据访问层的设计方法。

一、ADO.NET数据库访问技术

ADO(ActiveX Data Object)和ADO.NET是微软推出的针对独立数据访问架构的解决方案。ADO.NET提供了一个统一的编程模式和一组公用的类来进行任何类型的数据访问,而不管你用何种语言来开发代码。ADO.NET是全新的,但又与ADO尽可能保持一致,它使编程模式从一个客户端/服务器、基于连接的模式转变到了一个新的模式,这个新模式可以让断开的前端下载记录、离线工作、然后重新连接来提交变化。ADO.NET是WinForms应用程序、ASP.NET应用程序和Web services的一个共有的特点。其功能可以跨LAN和Internet连接来实现。

(一)DO.NET的组件

ADO.NET中最主要的组件有Connection、Command、DataAdapter、DataReader和DataSet。这些组件的前4项一起被称为.NET数据提供程序(Data Provider)。目前有SQL Server

.NET和OLE DB .NET两种数据提供程序。每种提供程序都包含所有这4个组件,它们的工作原理也很相似,我们称为数据操作组件。数据操作组件最主要是当作DataSet、DataReader、DataView与数据源之间的桥梁,负责将数据源中的数据取出后植入DataSet、DataReader、DataView中,以及将数据存回数据源的工作。

(二)ADO.NET访问数据库

ADO.NET的最重要概念之一是DataSet。DataSet是不依赖于数据库的独立数据集合。所谓独立,就是:即使断开数据链路,或者关闭数据库,DataSet依然是可用的。下面是ADO.NET访问数据库并返回DataSet的步骤:(1)创建一个应用程序与数据库连接的链路;(2)返回一个记录集合;(3)把记录集合填充到DataSet;(4)如果需要,重复第(2)步(DataSet可以包含多个数据集合);(5)关闭数据库连接(使用数据适配器时自动打开和关闭连接);(6)对DataSet上的数据集合进行必要的数据操作。

DataSet在内部是用XML来描述数据的。由于XML是一种平台无关、语言无关的数据描述语言,而且可以描述复杂数据关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。

二、数据访问层的设计

DAL是个代码层,包装了所有访问数据库的复杂操作。在应用程序对数据库访问时,通过调用DAL,而DAL将与数据库或存储过程通信。创建DAL的原因与使用存储过程类似:可以很容易的管理改变。允许将所有的数据代码放在一个位置上。DAL可以是组件或类,带有许多可从应用程序中调用的与数据相关的方法。

通过了解ADO.NET的框架及基本的功能,利用SQL数据提供程序,我们就可以编写专门访问SQL Server 2000数据库的对象,并将之封装优化,形成相对独立的层次,并拥有自己独立的命名空间。对其加以修改也可用于其它数据库平台。

要通过DAL访问数据库,基本思想是通过数据库操作指令或数据库中已建立的存储过程,执行一系列查询、删除、插入和修改更新等事务。

(一)2.1数据访问组件的实现

在Visual Studio .NET集成开发环境(IDE)中,可以将组件作为新项目添加到我们的项目整体解决方案中,然后再创建一个新的组件,IDE组件设计器会自动产生一些代码,在这些代码中,有一部分代码与类定义很相似。

下面的内容是定义一个具体组件,该组件包含了SQLSERVER数据库的访问功能并返回DatSet数据集。

1.首先,为了保证组件能够正常工作,需要导入命名空间,并为组件提供一个新的命名空间并定义类的名称和类的继承属性:

Imports System.Data.Sqlclient

Imports System.Data.Sqltypes

Imports System.Xml

Imports System.Collections

NamespaceDALdataaccess

Public NotInheritable Class Sqldata

我们将Sqldata类指定为NotInheritable(不允许继承此类)。

2.对象和变量的定义

‘声明ADO.NET组件变量

Private dalconnection AS SqlConnection

Private dalcommand AS SqlCommand

Private dalsqldataadapter AS SqlDataAdapter

Private daldataset AS DataSet

‘声明连接字符串变量

Private dalconnectionstring AS String

‘定义模块名称变量

Private modulename AS String

‘定义出错信息变量

Private dalerrorexceptionmessage as tring=”Data Application Error.”

3.构造函数的定义

Public Sub New()

MyBase.New()

'该调用是组件设计器所必需的。

InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

modulename=Me.GetType.ToString

End Sub

通过传递连接字符串参数调用该对象

Public Sub New(ByVal connection AS String)

MyBase.New()

Dalconnectionstring=connection

Modulename=Me.GetType.ToString

End Sub

4.属性的定义

如果不通过参数调用该对象,那么就需要在实例化该对象之后设置其属性。下面是设置connectionstring的属性的代码:

Public Property connectionstring() AS String

Get

Try

Return dqlconnection.connectionstring

Catch

Return “”

End Try

End Get

End Property

5.方法的定义

在完成上述基础工作之后,就可以编写方法程序了。下面是一个产生DataSet数据集的方法程序:

Public Function DALdataset(ByVal sqlselect AS String,Optional ByVal Tablename AS string=Nothing) AS DataSet

Try

Dalconnection=New Sqlconnection(dalconnectionstring)Dalcommand=Sqlcommand(sqlselect,dalconnection)

DalsqlDataAdapter=New Sqldataadapter(dalcommand)

If tablename=Nothing THEN

Dalsqldataadapter.Fll(daldataset)

ELSEDalsqldataadapter.Fll(daldataset,tablename)

End if

Dalconnection.close()

Return daldataset

Catch ExceptionObject as Exception

Throw New Exception(dalerrorexceptionmessage,ExceptionObject)

End Try

End Function

至此,这个简单的数据库访问组件设计完毕,可通过.NET的集成开发环境的生成功能,编译生成DLL文件,供其它应用程序调用。

(二)在应用程序中使用数据访问组件

在完成组件的定义后下面介绍在应用程序中调用这些组件的方法。这些代码非常简单,具体的步骤如下:(1)导入System.Data命名空间,以方便定义常用的数据变量和对象;(2)组件的注册(在项目的引用项中加入数据访问层组件);(3)导入XXX.DALdataaccess命名空间,是我们定义的数据访问组件所在的位置,其中XXX代表组件所在的项目名称;(4)声明一个DataSet对象、数据库连接字符串和SQL语句;(5)调用数据访问组件。

具体代码如下:

Imports System.Data

Imports XXX.DALdataaccess

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim myconnectionstring,mysql AS string

Dim mydatase AS DataSetMyconnectionstring=ConfigurationSettings.AppSettings("connectionstrings")

Mysql=”SELECT * FROM Anthors”

‘初始华myDAL实例

Dim myDAL AS New DALdataaccess(myconnectionstring)

‘返回数据集

mydataset=myDAL.DALdataset(mysql,anthors)

……以下为对数据集的具体操作

End Sub

在上述代码中关于连接字符串的读取,需要在web.config文件中做如下设置:

xml version="1.0" encoding="utf-8" ?

User ID=sa;Data Source=(local);”&_

“Initial Catalog=pubs” />

(三)关于上述设计的补充说明

上面对数据访问层的设计方法以实例的形式进行了详细的说明,但在代码设计中并没有将所有的代码全部写出来。这些相关的代码应该包括:

(1) 数据异常处理;

(2) SQL语句的检查功能;

(3) 返回的是DataReader而不是DataSet;

(4) 调用存储过程而不是执行SQL语句并且需要传递参数。

有关这些问题的解决方法与设计DALdataset方法基本类似,只是需要增加相关的函数,用以处理数据异常、语句检查、参数处理等,限于篇幅在此文中不再进行阐述。

三、结语

本文利用ADO.NET所提供的优越特性,在Microsoft.NET环境下,用VB.NET语言创建了一个数据访问组件,该组件将重要的数据访问功能封装到一个功能强、快速可靠的数据访问工具中,提供了对SQLServer数据库的访问方法。通过对上述组件的功能扩充,不但可以返回多种数据格式,而且可以访问多种数据库平台。这种访问工具,作为多层结构中的一个层次,既可应用于WEB数据库访问,也可应用于Windows应用程序中。

DAL的提出,对传统的三层架构模式提出了挑战。由于有了DAL,开发人员可以摆脱烦琐的数据库访问指令的纠缠,极大的提高生产效率。

作者简介:高丙云(1966-),男,山东人,中国海洋大学高等职业技术学院高级工程师,研究方向:计算机网络、数据库开发。