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