摘要:ADO.NET是微軟公司基于.NET框架而創(chuàng)建的通用數(shù)據(jù)訪問,是VB.NET數(shù)據(jù)庫應(yīng)用的核心部分。文章從ADO.NET技術(shù)入手,研究了VB.NET應(yīng)用程序在連接環(huán)境下的數(shù)據(jù)存取。
關(guān)鍵詞:ADO.NET;數(shù)據(jù)庫;VB.NET;存儲過程
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)17-21387-02
1 ADO.NET數(shù)據(jù)訪問技術(shù)
通用數(shù)據(jù)訪問是用于訪問.NET數(shù)據(jù)提供程序的Microsoft策略,其目的是可以從計算機(jī)上的應(yīng)用程序中訪問數(shù)據(jù)源。在.NET框架中,這功能的實(shí)現(xiàn)由ADO.NET來完成,ADO(ActiveX對象,ActiveX Data Objects)是一種提供訪問各種數(shù)據(jù)類型的連接機(jī)制。
ADO.NET主要包含兩個核心組件:數(shù)據(jù)集(DataSet)和.NET數(shù)據(jù)提供程序。其中數(shù)據(jù)集與數(shù)據(jù)庫是完全切斷,而.NET數(shù)據(jù)提供程序和數(shù)據(jù)庫自然交互。ADO.NET的作用就是從數(shù)據(jù)操作中分解出數(shù)據(jù)訪問。在數(shù)據(jù)訪問中,ADO.NET對于客戶端與數(shù)據(jù)庫的允許環(huán)境,分為兩種:一是連接環(huán)境(Connected);二是非連接環(huán)境(Disconnected)。
ADO.NET中.NET的數(shù)據(jù)提供程序用于實(shí)現(xiàn)數(shù)據(jù)的訪問操作。數(shù)據(jù)集(DataSet)對象是用于ADO.NET非連接架構(gòu)下的主要對象,由數(shù)據(jù)適配器(DataAdapter)提供連接DataSet對象和數(shù)據(jù)源。
ADO.NET是Microsoft公司.NET框架結(jié)構(gòu)中的一個類,它在System.Data.dll文件中,并且與System.Xml.dll中的XML類集成。在編譯使用System.Data命名空間的代碼時,將引用System.Data.dll與System.Xml.dll。在編寫應(yīng)用程序中若要使用ADO.NET對象,必須使用:Imports System.Data語句。
2 連接環(huán)境下的數(shù)據(jù)存取
連接環(huán)境下對數(shù)據(jù)庫操作是指應(yīng)用程序始終與數(shù)據(jù)庫相連接,這種操作方式主要用于數(shù)據(jù)時常更新的環(huán)境,并且數(shù)據(jù)是只讀的。
2.1 連接環(huán)境下數(shù)據(jù)存取的基本步驟
在連接環(huán)境下數(shù)據(jù)的存取,主要是通過三步來實(shí)現(xiàn):一是用Connection對象實(shí)現(xiàn)與數(shù)據(jù)庫的連接開啟。Connection對象把數(shù)據(jù)連接的所有功能都包裝起來,連接時主要是設(shè)置其ConnectionString屬性與Open()方法來實(shí)現(xiàn);二是使用Command對象向數(shù)據(jù)庫索取所要操作的數(shù)據(jù)。執(zhí)行的命令信息(如:SQL語句、SQL存儲的過程名等)主要由CommandText屬性決定;三是使用DataReader對象的Read()方法來讀取數(shù)據(jù),或做其他存取;最后是使用Close()方法關(guān)閉連接的數(shù)據(jù)庫,以及Dispose()方法來釋放所占的內(nèi)存空間。
2.2 連接環(huán)境中的類與對象創(chuàng)建
連接環(huán)境下使用的類主要有四個:Connection類建立與指定數(shù)據(jù)源的連接;Command類實(shí)現(xiàn)對數(shù)據(jù)源執(zhí)行的命令;DataReader類從數(shù)據(jù)源中讀取單向只讀的數(shù)據(jù);DataAdapter類是數(shù)據(jù)庫和應(yīng)用程序之間的橋梁,既可執(zhí)行Command對象,從數(shù)據(jù)庫中檢索數(shù)據(jù),填充到DataSet對象中,又可使用DataSet對象插入、更新和刪除數(shù)據(jù)庫中的數(shù)據(jù)。
對象是類的實(shí)例化,對象的產(chǎn)生通常使用.NET提供的構(gòu)造函數(shù)。同一個類的構(gòu)造函數(shù)有多種形式,其共同點(diǎn)是使用關(guān)鍵字New來初始化參數(shù)。構(gòu)造函數(shù)的基本格式為式:Public Sub New([參數(shù)列]),根據(jù)參數(shù)的有無,或多少形成構(gòu)造函數(shù)的多種格式。
在連接環(huán)境下的四個類中,特別要注意的是DataReader對象的產(chǎn)生不是通過構(gòu)造函數(shù)來實(shí)現(xiàn),而是先調(diào)用Command對象的ExeucuteReader()方法,再由ExeucuteReader()方法創(chuàng)建一個DataReader對象,最后由DataReader對象的Read()方法通過Connection對象從數(shù)據(jù)源獲取一個或多個結(jié)果集。Read()方法返回的是一個布爾值,編寫代碼時根據(jù)Read()的值來判斷記錄指針是否移到文件的末尾,每調(diào)用一次Read()方法可獲取一行數(shù)據(jù)記錄。
3 連接環(huán)境下數(shù)據(jù)存取應(yīng)用
連接環(huán)境下數(shù)據(jù)的存取有多種方式,常用的方式有兩種:一是使用數(shù)據(jù)閱讀器(DataReader)對象;二是使用存儲過程。
3.1 利用DataReader對象實(shí)現(xiàn)數(shù)據(jù)的讀取
(1)讀取數(shù)據(jù)。下面代碼段是基于VB.NET實(shí)現(xiàn)從“學(xué)生信息”表中分別讀取性別為“男”或“女”的學(xué)生基本信息,并將結(jié)果顯示到對應(yīng)文本框的過程:
Dim sCom As New SqlCommand'建立SqlCommand對象
sCom.Connection = sCon
'將兩條Select語句賦給CommandText屬性
sCom.CommandText = \"Select *From 學(xué)生信息 where 性別 ='男';\" _
\"Select *From 學(xué)生信息 where 性別 ='女';\"
Dim myReader As SqlDataReader= sCom.ExecuteReader
While myReader.Read '順序處理各個結(jié)果集
For I = 0 To myReader.FieldCount - 1
strInfo += myReader.GetName(I) \":\" myReader.Item(I) vbCrLf
Next
End While
TxtMan.Text = strInfo
myReader.NextResult()
strInfo = \"\"
While myReader.Read
For I = 0 To myReader.FieldCount - 1
strInfo += myReader.GetName(I) \":\" myReader(I) vbCrLf
Next
End While
TxtWoman.Text = strInfo
(2)輸出數(shù)據(jù)。數(shù)據(jù)的輸出可以通過控制臺、文本框、DataGrid控件等。也可以輸出到其他的應(yīng)用軟件中,如Word、Excel中,因?yàn)檫@些常用的office辦公應(yīng)用軟件對于用戶來說很易于接受,當(dāng)然用數(shù)據(jù)報表輸出也很實(shí)用。
3.2 使用存儲過程實(shí)現(xiàn)數(shù)據(jù)的讀取
存儲過程(Stored procedure)是事先編寫好的存儲在SQL Server服務(wù)器上的代碼,它可以對數(shù)據(jù)庫進(jìn)行操作,也可以返回一個記錄集。存儲過程實(shí)際就是一些SQL語句和命令的集合,像程序里面的過程或函數(shù)一樣,是語句的集合。
例如,若在客戶端VB.NET應(yīng)用程序中通過ADO.NET逐個向服務(wù)器發(fā)送SQL語句,執(zhí)行一條語句后將結(jié)果送回客戶端,再根據(jù)結(jié)果發(fā)送下一個SQL語句。如此反復(fù),就會在網(wǎng)絡(luò)上來回傳送多次中間結(jié)果之后,才能得到最后的數(shù)據(jù)。如果使用存儲過程,把所有的執(zhí)行邏輯集中在一個存儲過程中,保留在服務(wù)器上,則在VB.NET應(yīng)用程序中只需傳輸過程名稱和參數(shù)值的Execute語句即可。
參考文獻(xiàn):
[1] 魏崢,王軍,崔同良. ADO.NET程序設(shè)計教程與實(shí)驗(yàn)[M].北京:清華大學(xué)出版社,2007.
[2] 盧智勇,譚小丹,李光明. Visual Basic.NET數(shù)據(jù)庫程序設(shè)計與實(shí)例[M].北京:冶金工業(yè)出版社,2005.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文