国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于.NET環(huán)境的數(shù)據(jù)訪問層的設(shè)計與實現(xiàn)

2009-06-29 05:03高丙云
中國高新技術(shù)企業(yè) 2009年10期

摘要:文章探討了利用ADO.NET技術(shù)和Microsoft.NET環(huán)境設(shè)計數(shù)據(jù)訪問層的方法,使用VB.NET語言和.NET的集成開發(fā)環(huán)境(IDE),創(chuàng)建數(shù)據(jù)訪問組件,實現(xiàn)數(shù)據(jù)訪問層的實例,介紹了在應用程序中調(diào)用數(shù)據(jù)訪問層的方法。

關(guān)鍵詞:.NET環(huán)境;數(shù)據(jù)訪問層;ADO.NET技術(shù);數(shù)據(jù)訪問組件;DAL

中圖分類號:TP311文獻標識碼:A文章編號:1009-2374(2009)10-0014-03

每一個應用軟件與數(shù)據(jù)庫之間都會用到一些數(shù)據(jù)訪問技術(shù),在.Net中,對于SQL Server和其他數(shù)據(jù)庫(支持OleDb),采用不同的訪問方法,這些訪問方法以組件類的形式存在,分別分布于System.Data.SqlClient和System.Data.OleDb名稱空間中。微軟后來又推出了專門用于訪問Oracle數(shù)據(jù)庫的類庫。

在應用程序的設(shè)計中,數(shù)據(jù)庫的訪問非常重要。為了統(tǒng)一對數(shù)據(jù)的訪問方式,我們在設(shè)計的時候,可以在框架的類庫中包含數(shù)據(jù)訪問服務,封裝常用的對數(shù)據(jù)庫的各種操作,這樣,在具體軟件系統(tǒng)開發(fā)的時候,能夠盡量做到數(shù)據(jù)庫無關(guān),大大簡化了開發(fā)和部署工作。這種在實際開發(fā)過程中將數(shù)據(jù)庫訪問方法設(shè)計成組件或類進行封裝,并形成一個獨立的層次,稱之為數(shù)據(jù)訪問層,簡稱為DAL(Data Access Layer)。本文是在

.NET環(huán)境下,以VB.NET語言訪問WEB數(shù)據(jù)庫為例,詳細闡述了數(shù)據(jù)訪問層的設(shè)計方法。

一、ADO.NET數(shù)據(jù)庫訪問技術(shù)

ADO(ActiveX Data Object)和ADO.NET是微軟推出的針對獨立數(shù)據(jù)訪問架構(gòu)的解決方案。ADO.NET提供了一個統(tǒng)一的編程模式和一組公用的類來進行任何類型的數(shù)據(jù)訪問,而不管你用何種語言來開發(fā)代碼。ADO.NET是全新的,但又與ADO盡可能保持一致,它使編程模式從一個客戶端/服務器、基于連接的模式轉(zhuǎn)變到了一個新的模式,這個新模式可以讓斷開的前端下載記錄、離線工作、然后重新連接來提交變化。ADO.NET是WinForms應用程序、ASP.NET應用程序和Web services的一個共有的特點。其功能可以跨LAN和Internet連接來實現(xiàn)。

(一)DO.NET的組件

ADO.NET中最主要的組件有Connection、Command、DataAdapter、DataReader和DataSet。這些組件的前4項一起被稱為.NET數(shù)據(jù)提供程序(Data Provider)。目前有SQL Server

.NET和OLE DB .NET兩種數(shù)據(jù)提供程序。每種提供程序都包含所有這4個組件,它們的工作原理也很相似,我們稱為數(shù)據(jù)操作組件。數(shù)據(jù)操作組件最主要是當作DataSet、DataReader、DataView與數(shù)據(jù)源之間的橋梁,負責將數(shù)據(jù)源中的數(shù)據(jù)取出后植入DataSet、DataReader、DataView中,以及將數(shù)據(jù)存回數(shù)據(jù)源的工作。

(二)ADO.NET訪問數(shù)據(jù)庫

ADO.NET的最重要概念之一是DataSet。DataSet是不依賴于數(shù)據(jù)庫的獨立數(shù)據(jù)集合。所謂獨立,就是:即使斷開數(shù)據(jù)鏈路,或者關(guān)閉數(shù)據(jù)庫,DataSet依然是可用的。下面是ADO.NET訪問數(shù)據(jù)庫并返回DataSet的步驟:(1)創(chuàng)建一個應用程序與數(shù)據(jù)庫連接的鏈路;(2)返回一個記錄集合;(3)把記錄集合填充到DataSet;(4)如果需要,重復第(2)步(DataSet可以包含多個數(shù)據(jù)集合);(5)關(guān)閉數(shù)據(jù)庫連接(使用數(shù)據(jù)適配器時自動打開和關(guān)閉連接);(6)對DataSet上的數(shù)據(jù)集合進行必要的數(shù)據(jù)操作。

DataSet在內(nèi)部是用XML來描述數(shù)據(jù)的。由于XML是一種平臺無關(guān)、語言無關(guān)的數(shù)據(jù)描述語言,而且可以描述復雜數(shù)據(jù)關(guān)系的數(shù)據(jù),比如父子關(guān)系的數(shù)據(jù),所以DataSet實際上可以容納具有復雜關(guān)系的數(shù)據(jù),而且不再依賴于數(shù)據(jù)庫鏈路。

二、數(shù)據(jù)訪問層的設(shè)計

DAL是個代碼層,包裝了所有訪問數(shù)據(jù)庫的復雜操作。在應用程序?qū)?shù)據(jù)庫訪問時,通過調(diào)用DAL,而DAL將與數(shù)據(jù)庫或存儲過程通信。創(chuàng)建DAL的原因與使用存儲過程類似:可以很容易的管理改變。允許將所有的數(shù)據(jù)代碼放在一個位置上。DAL可以是組件或類,帶有許多可從應用程序中調(diào)用的與數(shù)據(jù)相關(guān)的方法。

通過了解ADO.NET的框架及基本的功能,利用SQL數(shù)據(jù)提供程序,我們就可以編寫專門訪問SQL Server 2000數(shù)據(jù)庫的對象,并將之封裝優(yōu)化,形成相對獨立的層次,并擁有自己獨立的命名空間。對其加以修改也可用于其它數(shù)據(jù)庫平臺。

要通過DAL訪問數(shù)據(jù)庫,基本思想是通過數(shù)據(jù)庫操作指令或數(shù)據(jù)庫中已建立的存儲過程,執(zhí)行一系列查詢、刪除、插入和修改更新等事務。

(一)2.1數(shù)據(jù)訪問組件的實現(xiàn)

在Visual Studio .NET集成開發(fā)環(huán)境(IDE)中,可以將組件作為新項目添加到我們的項目整體解決方案中,然后再創(chuàng)建一個新的組件,IDE組件設(shè)計器會自動產(chǎn)生一些代碼,在這些代碼中,有一部分代碼與類定義很相似。

下面的內(nèi)容是定義一個具體組件,該組件包含了SQLSERVER數(shù)據(jù)庫的訪問功能并返回DatSet數(shù)據(jù)集。

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.構(gòu)造函數(shù)的定義

Public Sub New()

MyBase.New()

'該調(diào)用是組件設(shè)計器所必需的。

InitializeComponent()

'在 InitializeComponent() 調(diào)用之后添加任何初始化

modulename=Me.GetType.ToString

End Sub

通過傳遞連接字符串參數(shù)調(diào)用該對象

Public Sub New(ByVal connection AS String)

MyBase.New()

Dalconnectionstring=connection

Modulename=Me.GetType.ToString

End Sub

4.屬性的定義

如果不通過參數(shù)調(diào)用該對象,那么就需要在實例化該對象之后設(shè)置其屬性。下面是設(shè)置connectionstring的屬性的代碼:

Public Property connectionstring() AS String

Get

Try

Return dqlconnection.connectionstring

Catch

Return “”

End Try

End Get

End Property

5.方法的定義

在完成上述基礎(chǔ)工作之后,就可以編寫方法程序了。下面是一個產(chǎn)生DataSet數(shù)據(jù)集的方法程序:

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

至此,這個簡單的數(shù)據(jù)庫訪問組件設(shè)計完畢,可通過.NET的集成開發(fā)環(huán)境的生成功能,編譯生成DLL文件,供其它應用程序調(diào)用。

(二)在應用程序中使用數(shù)據(jù)訪問組件

在完成組件的定義后下面介紹在應用程序中調(diào)用這些組件的方法。這些代碼非常簡單,具體的步驟如下:(1)導入System.Data命名空間,以方便定義常用的數(shù)據(jù)變量和對象;(2)組件的注冊(在項目的引用項中加入數(shù)據(jù)訪問層組件);(3)導入XXX.DALdataaccess命名空間,是我們定義的數(shù)據(jù)訪問組件所在的位置,其中XXX代表組件所在的項目名稱;(4)聲明一個DataSet對象、數(shù)據(jù)庫連接字符串和SQL語句;(5)調(diào)用數(shù)據(jù)訪問組件。

具體代碼如下:

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)

‘返回數(shù)據(jù)集

mydataset=myDAL.DALdataset(mysql,anthors)

……以下為對數(shù)據(jù)集的具體操作

End Sub

在上述代碼中關(guān)于連接字符串的讀取,需要在web.config文件中做如下設(shè)置:

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

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

“Initial Catalog=pubs” />

(三)關(guān)于上述設(shè)計的補充說明

上面對數(shù)據(jù)訪問層的設(shè)計方法以實例的形式進行了詳細的說明,但在代碼設(shè)計中并沒有將所有的代碼全部寫出來。這些相關(guān)的代碼應該包括:

(1) 數(shù)據(jù)異常處理;

(2) SQL語句的檢查功能;

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

(4) 調(diào)用存儲過程而不是執(zhí)行SQL語句并且需要傳遞參數(shù)。

有關(guān)這些問題的解決方法與設(shè)計DALdataset方法基本類似,只是需要增加相關(guān)的函數(shù),用以處理數(shù)據(jù)異常、語句檢查、參數(shù)處理等,限于篇幅在此文中不再進行闡述。

三、結(jié)語

本文利用ADO.NET所提供的優(yōu)越特性,在Microsoft.NET環(huán)境下,用VB.NET語言創(chuàng)建了一個數(shù)據(jù)訪問組件,該組件將重要的數(shù)據(jù)訪問功能封裝到一個功能強、快速可靠的數(shù)據(jù)訪問工具中,提供了對SQLServer數(shù)據(jù)庫的訪問方法。通過對上述組件的功能擴充,不但可以返回多種數(shù)據(jù)格式,而且可以訪問多種數(shù)據(jù)庫平臺。這種訪問工具,作為多層結(jié)構(gòu)中的一個層次,既可應用于WEB數(shù)據(jù)庫訪問,也可應用于Windows應用程序中。

DAL的提出,對傳統(tǒng)的三層架構(gòu)模式提出了挑戰(zhàn)。由于有了DAL,開發(fā)人員可以擺脫煩瑣的數(shù)據(jù)庫訪問指令的糾纏,極大的提高生產(chǎn)效率。

作者簡介:高丙云(1966-),男,山東人,中國海洋大學高等職業(yè)技術(shù)學院高級工程師,研究方向:計算機網(wǎng)絡(luò)、數(shù)據(jù)庫開發(fā)。

太白县| 凯里市| 奈曼旗| 西城区| 平乐县| 南宫市| 龙南县| 广平县| 无棣县| 新津县| 乌恰县| 凌源市| 水城县| 吴堡县| 门源| 漠河县| 镇赉县| 呼玛县| 榆林市| 井研县| 衡南县| 黑水县| 博爱县| 泗阳县| 丰宁| 金昌市| 凭祥市| 巢湖市| 子洲县| 林甸县| 炉霍县| 潞西市| 临城县| 义马市| 八宿县| 博乐市| 东阳市| 通化县| 于田县| 岫岩| 黄平县|