劉維崗 (天津現(xiàn)代職業(yè)技術(shù)學(xué)院 天津300350)
隨著信息社會的到來,越來越多的管理從日常的手工轉(zhuǎn)向了數(shù)字化管理。比如:學(xué)生信息管理系統(tǒng)、圖書管理系統(tǒng)、科研課題管理系統(tǒng)等。這些系統(tǒng)的實(shí)現(xiàn)以及功能的完善,都離不開數(shù)據(jù)庫。隨著網(wǎng)絡(luò)的普及以及廣泛應(yīng)用,人們的生活學(xué)習(xí)、生產(chǎn)等都與之密切相關(guān)。隨之而來的就是信息管理系統(tǒng)在網(wǎng)絡(luò)上的廣泛應(yīng)用。如何開發(fā)出具有較高性能的基于網(wǎng)絡(luò)的信息管理系統(tǒng)?對于這一問題,我們只需要把最核心的技術(shù)解決了,那么這個(gè)基于網(wǎng)絡(luò)的信息管理系統(tǒng)的高效能的問題就可以很容易實(shí)現(xiàn)。如何實(shí)現(xiàn)對不同數(shù)據(jù)庫的訪問以及實(shí)現(xiàn)的方法,是本文主要闡述的內(nèi)容。
ASP.NET是ASP的前身,它是微軟公司的一項(xiàng)技術(shù),是一種對于嵌入在網(wǎng)頁中的腳本可由因特網(wǎng)服務(wù)器執(zhí)行的服務(wù)器端腳本技術(shù)。ASP.NET是一種WEB應(yīng)用程序開發(fā)平臺,它為用戶提供了完整的可視化開發(fā)環(huán)境,并在生產(chǎn)效率、靈活性和可擴(kuò)展性、性能、安全性、完整性上更加完善,在操作及代碼編寫上更加簡捷、方便。
1.1.1 靈活性 ASP.NET與語言無關(guān),可以選擇最適合應(yīng)用的程序語言,也可以跨多種語言分割程序。
1.1.2 數(shù)據(jù)訪問的高效性 ASP.NET通過ADO.NET提供的DataGrid等數(shù)據(jù)庫組件可以直接和數(shù)據(jù)庫聯(lián)系。
1.1.3 簡易性 大量使用組件技術(shù),從簡單的窗體提交到客戶身份驗(yàn)證很容易實(shí)現(xiàn)。采用代碼托管簡化程序開發(fā)過程。
1.1.4 高效性 頁面只需要一次編譯后不需要重新編譯,直到該頁面被修改或Web應(yīng)用程序重新啟動(dòng),這使得多次訪問時(shí)速度有了極大的提升。
1.1.5 ASP.NET具有更加完善的開發(fā)工具 可以使用微軟開發(fā)Visual Studio開發(fā)環(huán)境,使用ASP.NET控件進(jìn)行高效的應(yīng)用程序開發(fā)。
當(dāng)用戶向服務(wù)器發(fā)送一個(gè)HTTP,服務(wù)器的IIS接收到請求后之后,第一步是加載不同的.dll文件,主要根據(jù)客戶端發(fā)出請求的頁面類型確定相應(yīng)的.dll文件;第二步調(diào)用相應(yīng)的處理模塊,根據(jù)不同的請求調(diào)用能夠處理這個(gè)請求的模塊。在ASP.NET中,用HttpHandler(HTTP處理程序組件)模塊來實(shí)現(xiàn)。例如請求是.aspx類型文件,在服務(wù)器端有默認(rèn)的HttpHandler專門處理.aspx類型的文件。IIS在應(yīng)答用戶請求處理文件之前,需先經(jīng)過一些不同HttpModule的處理,這些都是系統(tǒng)默認(rèn)的Modules(用于獲取當(dāng)前應(yīng)用程序的模塊集合)。然后才再將這條請求發(fā)送給能夠處理這個(gè)請求的模塊。這樣可以安全、高效、可控地完成用戶的請求。ASP.NET運(yùn)行原理如圖1所示。
圖1 ASP.NET運(yùn)行原理圖
ADO.NET是下一代ActiveX Data Objects(ADO)。它是.NET Framework中的一列類庫,是一種數(shù)據(jù)存取模型。具有可擴(kuò)展性、WEB無狀態(tài)性。ADO.NET提供了到所有OLE-DB數(shù)據(jù)源的接口,讓開發(fā)人員可以在各種環(huán)境中對數(shù)據(jù)庫進(jìn)行連接、檢索、操縱和更新。在ADO.NET中,大量復(fù)雜的數(shù)據(jù)操作的代碼被封裝起來。這樣在開發(fā)ASP.NET應(yīng)用程序時(shí),只需要編寫少量的代碼即可完成大量的操作。ADO.NET并不像C#.NET、Visual Basic.NET那樣是一種語言,ADO.NET是對象的集合。
ADO.NET 中主要包括 Connection、Command、DataReader、DataSet和DataAdapter對象。每個(gè)對象的主要功能如下:①Connection對象主要提供與數(shù)據(jù)庫的連接功能;②Command對象用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令;③DataReader對象通過Command對象提供從數(shù)據(jù)庫檢索信息的功能,DataReader對象是以一種只讀的、向前的、快速的方式訪問數(shù)據(jù)庫;④DataSet是ADO.NET的核心對象,它是一個(gè)數(shù)據(jù)庫容器,可以把它當(dāng)作是存在于內(nèi)存的數(shù)據(jù)庫。DataSet是數(shù)據(jù)的內(nèi)存駐留表示形式,它可以用于多個(gè)不同形式的數(shù)據(jù)源。DataAdapter對象提供連接DataSet對象和數(shù)據(jù)源的橋梁。
針對不同的數(shù)據(jù)庫訪問需求,ADO.NET為訪問數(shù)據(jù)源中的數(shù)據(jù)提供了兩種模式:①基于連接的訪問模式,可以使用DataReader對象來實(shí)現(xiàn);②斷開連接模式,我們可以使用DataAdapter對象來實(shí)現(xiàn)。為了發(fā)揮ADO.NET的最佳性能和開發(fā)出高性能的應(yīng)用程序,我們在開發(fā)時(shí),需要根據(jù)自己的實(shí)際情況選擇合適的模式。
2.1.1 連接模式 這種模式是最常用、最基本的一種模式。在連接模式下,客戶機(jī)會一直保持和數(shù)據(jù)庫服務(wù)器的連接,然后讀取數(shù)據(jù)。所有數(shù)據(jù)庫的操作都需通過這個(gè)連接才能和后臺的數(shù)據(jù)源進(jìn)行交互,這和ADO技術(shù)是一樣的。這種訪問模式是通過DataReader對象來實(shí)現(xiàn)的,在已經(jīng)建立的數(shù)據(jù)連接的基礎(chǔ)上,DataReader對象提供了對數(shù)據(jù)庫的向前、只讀的在線數(shù)據(jù)訪問方式和進(jìn)行遍歷。這種模式適合數(shù)據(jù)傳輸量少、系統(tǒng)規(guī)模不大、客戶機(jī)和服務(wù)器在同一網(wǎng)絡(luò)內(nèi)的環(huán)境。ADO.NET的連接模式只能返回向前的、只讀的數(shù)據(jù),這是由DataReader對象的特性決定的。一個(gè)典型的ADO.NET連接模式如圖2所示。
圖2ADO.NET連接模式
連接模式下數(shù)據(jù)訪問的步驟如下:①使用Connection對象連接數(shù)據(jù)庫并向數(shù)據(jù)庫索取數(shù)據(jù)。②索取到的數(shù)據(jù)存放在DataReader(數(shù)據(jù)閱讀器)對象中并進(jìn)行讀取。③完成讀取操作后,關(guān)閉DataReader對象。④關(guān)閉Connection對象。
2.1.2 斷開連接模式 斷開連接模式是采用Dataset對象的數(shù)據(jù)訪問模式,DataSet是ADO.NET的中心概念,支持ADO.NET斷開式、分布式數(shù)據(jù)方案的核心對象。DataSet對象是創(chuàng)建在內(nèi)存中的集合對象。它可以包含任意數(shù)量的數(shù)據(jù)表,以及所有表的約束、索引和關(guān)系,相當(dāng)于在內(nèi)存中的小型關(guān)系數(shù)據(jù)庫。通過DataAdapter對象對數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行檢索,將所需要的數(shù)據(jù)填充到DataSet對象的表中,DataSet中的數(shù)據(jù)表格可以單獨(dú)存放,也可以通過DataRelation對象在表格之間建立關(guān)聯(lián),這樣增加了數(shù)據(jù)處理的靈活性。
在斷開連接模式中,服務(wù)器不需要維護(hù)和用戶之間的數(shù)據(jù)庫連接,只有當(dāng)用戶需要將更新的數(shù)據(jù)傳回到服務(wù)器時(shí)再重新連接,這樣服務(wù)器的負(fù)擔(dān)大大減輕,并且可以同時(shí)支持更多并發(fā)的用戶訪問。在整個(gè)過程都需要DataSet對象的支持和配合,這是ADO.NET的非凡之處。斷開連接模式比較適合于數(shù)據(jù)量較大、系統(tǒng)節(jié)點(diǎn)較多、結(jié)構(gòu)復(fù)雜的網(wǎng)絡(luò)。典型的ADO.NET斷開連接模式應(yīng)用如圖3所示。
圖3 ADO.NET斷開連接模式應(yīng)用
斷開連接模式下數(shù)據(jù)訪問的步驟如下:①使用Connection對象連接數(shù)據(jù)庫并獲取數(shù)據(jù)庫中的數(shù)據(jù)。②獲取到的數(shù)據(jù)存儲在DataAdapter(數(shù)據(jù)適配器)對象中并把數(shù)據(jù)填充到DataSet(數(shù)據(jù)集)對象中。③關(guān)閉Connection對象。④對用戶本地內(nèi)存中的DataSet(數(shù)據(jù)集)對象中的數(shù)據(jù)進(jìn)行各種操作。⑤操作完畢后,啟動(dòng)Connection對象連接數(shù)據(jù)庫。⑥利用DataAdapter對象更新數(shù)據(jù)庫。⑦關(guān)閉Connection對象。
創(chuàng)建一個(gè)數(shù)據(jù)庫鏈路;請求一個(gè)記錄集合;把記錄集合暫存到DataSet;如果需要,返回第2步(DataSet可以容納多個(gè)數(shù)據(jù)集合);關(guān)閉數(shù)據(jù)庫鏈路;在DataSet上做所需要的操作。
當(dāng)要連接到數(shù)據(jù)庫時(shí),首先確定一個(gè).NET數(shù)據(jù)提供程序。對于不同數(shù)據(jù)提供程序包含的類也不同。這些類能夠連接到數(shù)據(jù)源,高效地對數(shù)據(jù)進(jìn)行各種操作。利用Connection對象可以連接到數(shù)據(jù)庫。
3.1.1 Connection類有4種:SqlConnection類的對象連接SQL Server數(shù)據(jù)庫;OracleConnection類的對象連接Oracle數(shù)據(jù)庫;OleDbConnection類的對象連接支持OLE DB的數(shù)據(jù)庫,如Access;OdbcConnection類的對象連接任何支持ODBC的數(shù)據(jù)庫。
3.1.2 使用Connection對象連接數(shù)據(jù)庫。實(shí)現(xiàn)數(shù)據(jù)庫連接一般可采用以下步驟:①創(chuàng)建Connection對象;②把連接字符串賦值給Connection對象的Connection-String屬性;③調(diào)用Connection對象的Open方法打開連接;④操作完畢后,調(diào)用Connection對象的Close方法關(guān)閉連接。
3.2.1 使用SqlConnection對象連接SQLSERVER數(shù)據(jù)庫
首先建立用于與SQLSERVER服務(wù)器連接的類。語法如下:SqlConnection con=newSqlConnection("Server= 服務(wù)器名;User Id=用戶;Pwd=密碼;DataBase=數(shù)據(jù)庫名稱");
下面的代碼通過ADO.NET連接到本地SQL Server中的mydata數(shù)據(jù)庫。
3.2.2 使用OleDbConnection對象連接OLE DB數(shù)據(jù)庫
連接Access數(shù)據(jù)庫的語法格式
3.2.3 使用OdbcConnection對象連接ODBC數(shù)據(jù)庫
對于數(shù)據(jù)庫中的數(shù)據(jù)操作可以通過Command對象來實(shí)現(xiàn)。Command類用于執(zhí)行SQL命令或存儲過程。使用Connection對象與數(shù)據(jù)源建立連接后,使用Command類創(chuàng)建的對象進(jìn)行對數(shù)據(jù)源的增減、刪改等操作,操作實(shí)現(xiàn)的方式可以是使用SQL語句或是使用存儲過程。使用Command類執(zhí)行SQL命令一般可采用以下步驟:①創(chuàng)建Connection對象并設(shè)置要執(zhí)行的SQL命令和所使用的當(dāng)前連接;②用Connection對象的Open方法打開數(shù)據(jù)庫連接;③調(diào)用Command對象的相應(yīng)方法執(zhí)行SQL命令;④調(diào)用Connection對象的Close方法關(guān)閉連接。
以下對數(shù)據(jù)庫的操作以學(xué)生數(shù)據(jù)庫來實(shí)現(xiàn)。
3.3.1 從數(shù)據(jù)源中讀取數(shù)據(jù) 讀取數(shù)據(jù)一般有兩種方式,一種是DataReader對象來直接訪問,另外一種是通過DataSet和DataAdapter來訪問。
例如:
3.3.2 向數(shù)據(jù)庫中添加記錄 向數(shù)據(jù)庫中添加記錄,首先要?jiǎng)?chuàng)建SqlConnection和SqlCommand對象,然后打開數(shù)據(jù)數(shù)據(jù)庫連接,調(diào)用SqlCommand對象的ExecuteNonQuery方法完成插入操作,最后關(guān)閉數(shù)據(jù)庫連接。
例如:
3.3.3 更新數(shù)據(jù)庫記錄 更新數(shù)據(jù)庫記錄與添加數(shù)據(jù)庫記錄的操作基本一致,只要把插入記錄的SQL語句替換成更新記錄的SQL語句就可以了。
例如:
3.3.4 刪除數(shù)據(jù)庫記錄 刪除與添加和更新的步驟基本一致,只需要把相應(yīng)的SQL語句改動(dòng)一下即可。
例如:
隨著網(wǎng)絡(luò)的發(fā)展以及信息化的網(wǎng)絡(luò)普及,數(shù)據(jù)庫的應(yīng)用已經(jīng)越來越廣泛。作為信息管理系統(tǒng)中最核心的數(shù)據(jù)庫開發(fā)技術(shù)也越來越重要。ASP.NET作為一項(xiàng)Web應(yīng)用程序開發(fā)技術(shù)得到開發(fā)者的歡迎。其中ADO.NET技術(shù)實(shí)現(xiàn)了高速的、安全的數(shù)據(jù)訪問?!?/p>
[1]劉曉宇.基于.N ET的數(shù)據(jù)庫訪問技術(shù)優(yōu)化研究[J].軟件導(dǎo)刊,2011,10( 4):150-153.
[2]魏祖寬,江利娟,金在弘.?dāng)?shù)據(jù)庫訪問技術(shù)比較研究[J].計(jì)算機(jī)與現(xiàn)代化,2009(12):46-50,54.
[3]李維杰,孫乾君.SQ L Server2005數(shù)據(jù)庫原理與應(yīng)用簡明教程[M].北京:清華大學(xué)出版社,2007.
[4]陳英學(xué).A SP.N ET深入編程[M].北京:希望電子出版社,2001.
[5]陳會安.A SP.N ET2.0網(wǎng)頁制作徹底研究[M].第二版.北京:清華大學(xué)出版社,2007.
[6]蔣薇.基于A D O.N ET的數(shù)據(jù)訪問技術(shù)探索[J].儀器儀表學(xué)報(bào),2009,30(6):32-35.
[7]張躍廷.C#數(shù)據(jù)庫系統(tǒng)開發(fā)案例精選[M].北京:人民郵電出版社,2007.
[8]曾長軍,朱劍鋒,劉坤.SQ L Server數(shù)據(jù)庫原理及應(yīng)用[M].北京人民郵電出版社,2007:211.
[9]尼春雨,王國勝,紫寶杰.A SP.N ET+SQ L Server動(dòng)態(tài)網(wǎng)站開發(fā)[M].北京:清華大學(xué)出版社,2009:165.
[10]華國棟,劉文予.基于A D O.N ET的數(shù)據(jù)庫訪問及其性能優(yōu)化[J].計(jì)算機(jī)應(yīng)用研究,2004(6):215-217.