黃金山
摘要:近年來,我國的計算機網(wǎng)絡(luò)技術(shù)發(fā)展迅速,且為推動我國各個社會生產(chǎn)領(lǐng)域的發(fā)展做出了較大貢獻(xiàn)。作為計算機網(wǎng)絡(luò)技術(shù)發(fā)展的必然產(chǎn)物,數(shù)據(jù)庫技術(shù)的產(chǎn)生與發(fā)展不僅代表了我國的計算機網(wǎng)絡(luò)技術(shù)已經(jīng)進(jìn)入了一個新的階段,更代表了我國整體科技生產(chǎn)力的進(jìn)步和發(fā)展。該文以數(shù)據(jù)庫的管理為研究對象,通過對ASP.NET和ADO.NET技術(shù)進(jìn)行分析,在結(jié)合ADO.NET數(shù)據(jù)交換原理的基礎(chǔ)上,對其在數(shù)據(jù)庫管理中的應(yīng)用展開了深入研究。
關(guān)鍵詞:ASP.NET;ADO.NET;數(shù)據(jù)庫管理
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)29-6811-02
ASP.NET是近年來新興的一種動態(tài)網(wǎng)站的設(shè)計技術(shù),其是具有較強功能的交互式Web網(wǎng)站在建立過程中所應(yīng)用到的主要技術(shù),ASP.NET技術(shù)在動態(tài)網(wǎng)站設(shè)計中的應(yīng)用不僅大幅提高了網(wǎng)站資源的利用效率,而且也提高了系統(tǒng)對整個數(shù)據(jù)庫的管理效率。該文以ASP.NET中ADO.NET對數(shù)據(jù)庫的管理作為研究對象,通過闡述兩種技術(shù)的概念和特點,并結(jié)合ADO.NET的數(shù)據(jù)庫交換原理,對ADO.NET連接與控制的數(shù)據(jù)庫對象進(jìn)行了詳細(xì)研究。
1 ASP.NET與ADO.NET技術(shù)簡介
1.1 ASP.NET技術(shù)
ADO.NET作為NET Framework中的重要組成部分,是微軟公司推出的一種新型的動態(tài)網(wǎng)站的設(shè)計技術(shù)和程序框架,ASP.NET技術(shù)的應(yīng)用大幅提高了網(wǎng)站的性能和開發(fā)效率[1]。ASP.NET不僅拓展并加強了ASP(動態(tài)服務(wù)器頁面)在網(wǎng)頁開發(fā)過程中的功能優(yōu)勢,而且突破了單純以ASP技術(shù)進(jìn)行網(wǎng)站開發(fā)的各種限制,其最為關(guān)鍵的網(wǎng)站設(shè)計技術(shù)特色為:為網(wǎng)站設(shè)計提供了一個多語言組件的開發(fā)與執(zhí)行環(huán)境。
1.2 ADO.NET技術(shù)
ADO.NET是即動態(tài)網(wǎng)站數(shù)據(jù)訪問服務(wù),是ASP.NET技術(shù)的關(guān)鍵組成部分,具體說來則是在NET平臺中專門用來進(jìn)行后臺數(shù)據(jù)操作與存儲的一組類[2]。雖然ADO.NET是在ADO(數(shù)據(jù)庫中的數(shù)據(jù)結(jié)構(gòu))的基礎(chǔ)上發(fā)展而來的,但是ADO.NET的功能卻要比ADO強大的多。ADO.NET中除了引入面向?qū)ο蠼Y(jié)構(gòu)外,還將標(biāo)準(zhǔn)的可標(biāo)記擴(kuò)展語言(XML)作為數(shù)據(jù)交換的主要格式,從而實現(xiàn)網(wǎng)絡(luò)中不同系統(tǒng)的相互運作。
2 ADO.NET數(shù)據(jù)交換原理
由1.2可知ADO.NET是針對ADO的部分缺陷,進(jìn)行重新設(shè)計的新型數(shù)據(jù)訪問對象,其可以有力地支撐動態(tài)網(wǎng)站中的底層數(shù)據(jù)交換模型[3]?;贏DO的RecordSet(數(shù)據(jù)庫表中的記錄集)對象在不同的應(yīng)用程序或者不同的計算機組件之間進(jìn)行交換時,必須以COMmarshalling(列集)機制為基礎(chǔ),將相關(guān)數(shù)據(jù)和參數(shù)進(jìn)行二進(jìn)制格式的包裝,而由于.COM只支持Automation(自動化)的數(shù)據(jù)類型。因此,在利用ADO進(jìn)行RecordSet對象交換時,還需要依次進(jìn)行必要的數(shù)據(jù)轉(zhuǎn)換,增加了對象處理的復(fù)雜程度。而ADO.NET中的DataSet對象可以利用可標(biāo)記擴(kuò)展語言實現(xiàn)數(shù)據(jù)交換,使得交換后的數(shù)據(jù)可以直接通過防火墻被相關(guān)的計算機程序或組件所利用。此外,由于可標(biāo)記擴(kuò)展語言(XML)是一種簡單的文字?jǐn)?shù)據(jù),因此,系統(tǒng)接受端的應(yīng)用程序在運行時,就無需受到以COM為基礎(chǔ)的相關(guān)應(yīng)用程序的限制,在簡化了Marshalling數(shù)據(jù)包裝過程的同時,也有效提高了系統(tǒng)數(shù)據(jù)交換的速度。
3 ADO.NET連接與控制的數(shù)據(jù)庫對象
利用ADO.NET技術(shù)進(jìn)行數(shù)據(jù)庫管理的實質(zhì)則是ADO.NET中的對象對數(shù)據(jù)庫的管理作用。由前文可知ADO.NET技術(shù)是在ADO技術(shù)的基礎(chǔ)上發(fā)展而來的,因此,其除了具有ADO的Command與Connection對象外,還具有許多新的對象與程序化接口,例如DataSet、DataReader以及DataAdapter對象等[4]。
3.1 數(shù)據(jù)庫的命令執(zhí)行對象Command
ADO.NET中的Command對象主要是數(shù)據(jù)庫的查詢、調(diào)用或存儲的過程以及對返回程序內(nèi)特定表內(nèi)容的直接請求[5]。在ADO.NET中,Command對象具有三種不同類型的查詢命令執(zhí)行原理,分別為:(1) 利用Execute Non Query(不需返回數(shù)據(jù)命令)返回的并不是系統(tǒng)所需查詢的數(shù)據(jù)行,而是系統(tǒng)需要返回的行數(shù);(2) Executer reader(執(zhí)行-查詢)是進(jìn)行數(shù)據(jù)讀取的一種簡單且高效的方法,其可以將Oledb reader對象的查詢結(jié)果返回,具體的返回方法為:若存在相關(guān)數(shù)據(jù)的記錄,則系統(tǒng)將自動讀取第一條記錄,然后將其數(shù)據(jù)指針自動下移;若不存在數(shù)據(jù)記錄,則直接返回False;(3) 最后一種方法則為xecute-Xml-Reader方法,是專門用來處理以可擴(kuò)展標(biāo)記語言格式為主的系統(tǒng)返回結(jié)果的查詢工作的。
3.2 數(shù)據(jù)庫的連接對象Connection
ADO.NET中的Connection是用來與數(shù)據(jù)庫建立或斷開連接的對象,其在數(shù)據(jù)庫管理中具有“渠道”的作用,其他對象例如DataSet和DataReader等均需要通過其才能與系統(tǒng)數(shù)據(jù)庫進(jìn)行連接,進(jìn)而提交并獲取相關(guān)查詢結(jié)果。Connection建立對象與數(shù)據(jù)庫連接的方法主要包括了如下幾種:
1) 利用SQL Server(結(jié)構(gòu)化語句查詢服務(wù))結(jié)構(gòu)將對象與數(shù)據(jù)庫連接并打開數(shù)據(jù)庫的方法,方法的具體實現(xiàn)方法如下:
Dim splcon as New sqlConnection (dserver=lo-Calhost;uid=sa;pwd=sa;datebase=Northwindd);
sqlcon.Open;
sqlcmm.Connection = splcon
其中對象釋放與斷開連接的方法分別為:sqlcon.Close與sqlcon1=Nothingendprint
2) 低級應(yīng)用程序接口(OLEDB)進(jìn)行對象連接與打開數(shù)據(jù)庫的方法為:
Dim oleconn as New oleconn (dprovider=SQLOLEDB;database=Northwind;user id=sa;pwd=sad);
olecmm.Connection = oleconn
其中,olecmm表示olecmm.Command的對象,釋放對象的方法為:
olecmm = nothing;
oleconn1 Close;
oleconn = nothing
3.3 存儲數(shù)據(jù)讀取對象DataSet
3.3.1 DataReader對象
動態(tài)網(wǎng)站當(dāng)中,當(dāng)以瀏覽的方式對大量的信息數(shù)據(jù)進(jìn)行查看時,通常會占用大量的內(nèi)存,從而使系統(tǒng)的性能下降。例如,在利用ADO-Recordset對象對某個鏈接中的1000行數(shù)據(jù)庫記錄進(jìn)行讀取時,則必須將此1000行數(shù)據(jù)記錄平均分配到上述鏈接當(dāng)中,一直到這個鏈接的生命周期完全結(jié)束。假定在同一時間內(nèi),存在多個用戶對同一臺計算機進(jìn)行上述操作,則計算機的內(nèi)存則不可避免地被過度使用[7]。為了解決這一問題,ADO.NET為系統(tǒng)提供了Data Reader對象。Data Reader對象的實質(zhì)是從數(shù)據(jù)返回的一個只能向下滾動的只讀型串流,且基于DataReader的數(shù)據(jù)程序在當(dāng)前內(nèi)存之中每次僅保留一條記錄,從而為系統(tǒng)節(jié)省了較大的內(nèi)存空間,提高了系統(tǒng)的運行效率。Data Reader對象的應(yīng)用主要體現(xiàn)在以下兩種數(shù)據(jù)處理情況:(1) 客戶界面并未用到數(shù)據(jù)綁定,且更新數(shù)據(jù)是在基于結(jié)構(gòu)化查詢語言的前提下,以手寫形式形成的代碼,在此種情況下,Data Reader對象將為系統(tǒng)提供有效的數(shù)據(jù)訪問方法;(2) 另一種則是需要查詢數(shù)據(jù)庫狀態(tài)但無需實現(xiàn)數(shù)據(jù)自動更新功能的情況。此時,ADO.NET中基于結(jié)構(gòu)化查詢語言的DataReader對象通過實現(xiàn)對SQL Sever平臺的數(shù)據(jù)庫進(jìn)行直接操作,在借助低級程序接口Oledb的基礎(chǔ)上,對ADO中的核心成員數(shù)據(jù)進(jìn)行支持[8]。情況(1) 和情況(2) 具體的數(shù)據(jù)庫管理方法為:
1) Dim myReader As Sq-l
DataReader=myCommand.ExecuteReader()
2) Dim myReader As OLEDb
DataReader=mayCommand.ExecuteReader()
值得注意的是兩種情況下ADO.NET對數(shù)據(jù)庫的管理方法均是在VB程序語言下進(jìn)行實現(xiàn)的。
3.4 數(shù)據(jù)綁定
數(shù)據(jù)綁定是ADO.NET對數(shù)據(jù)庫進(jìn)行管理的另一主要方法。所謂數(shù)據(jù)綁定是指將計算機瀏覽器的顯示控件與數(shù)據(jù)源相連,則ASP.NET在無需人工參與的情況下,便可以將數(shù)據(jù)源中的數(shù)據(jù)自動顯示出來的一種自動化數(shù)據(jù)管理方法。在進(jìn)行系統(tǒng)數(shù)據(jù)綁定前,首先要指明數(shù)據(jù)源,再利用Databinder的數(shù)據(jù)綁定語法實現(xiàn)相關(guān)數(shù)據(jù)的最終綁定。利用ADO.NET對數(shù)據(jù)庫實現(xiàn)綁定的方法主要包括了如下三種:(1) 僅使用一個單獨控件,在單一控件的使用過程中,只有其自身與數(shù)據(jù)源進(jìn)行連接,即原始的Databinder方法;(2) 利用一個包裝控件,此時,該包裝空間中可以包括諸多子控件,進(jìn)而實現(xiàn)多個控件與數(shù)據(jù)源相連接,并達(dá)到數(shù)據(jù)綁定的目的,即基于DataGrid的數(shù)據(jù)綁定法;(3) 在不借助任何連接的基礎(chǔ)上,對Web頁面上顯示的所有內(nèi)容連接進(jìn)行直接獲取,以達(dá)到數(shù)據(jù)綁定的目的[9]。以此方法作為數(shù)據(jù)綁定的主要方法可以使系統(tǒng)在運行過程中,為用戶自動更新邏輯,大幅提高了數(shù)據(jù)的綁定和利用效率。
4 結(jié)論
本文通過對ASP.NET與ADO.NET技術(shù)的概念和特點進(jìn)行分析,在闡述ADO.NET技術(shù)的數(shù)據(jù)交換原理的基礎(chǔ)上,從數(shù)據(jù)庫的命令執(zhí)行對象Command、數(shù)據(jù)庫的連接對象Connection、存儲數(shù)據(jù)讀取對象Data以及數(shù)據(jù)綁定等方面對ADO.NET連接與控制的數(shù)endprint