摘要:在構建和開發基于數據庫的應用時,如何提高應用程序對數據庫的訪問效率和消除性能瓶頸是一個關鍵問題。文章簡要介紹了.NET框架下ADO.NET的體系結構;分析了在傳統情況下,采用數據集方式對數據進行讀取、插入、刪除以及更新操作存在的局限性;進而提出了一種性能優化的思路和方法:創建一個通用類,通過調用這個類去實現對數據庫的讀取和操作。文章以Asp.net(c#)和SQL數據庫為開發平臺,用實際項目中的部分代碼驗證了改進數據訪問模式后,更能夠提高項目的開發效率以及數據庫訪問效率的目的。
關鍵詞:ADO.NET;數據庫;性能優化;類;SQL
0 引言
互聯網絡技術的迅猛發展,使得人們已不再滿足簡單的通過Web來瀏覽和發布靜態信息,更多的依賴于Web的應用需求應運而生。對于過去的眾多基于共享式的數據庫應用系統,用戶也希望能將其移植到WWW上。隨著數據庫應用的擴展和深入,其數量和規模越來越大,因此對數據庫訪問技術的要求也就越來越高。有鑒于此,本文主要探討和研究了在Web方式下,提高項目的開發效率以及數據庫訪問效率的途徑。
1 現狀
在Web方式下,Web客戶端是一臺只需要安裝Web瀏覽器的客戶機,Web服務器安裝的是基于超文本標記語言(HTML,Hypertext Markup Language)的服務器軟件。數據應用程序駐留在Web服務器上,最終用戶通過Web瀏覽器生成大量的數據庫應用程序。瀏覽器借助超文本傳輸協議(HTTP,HypertextTransfer Protocol)協議,通過Internet與Web服務器通信。軟件系統體系結構為瀏覽器/服務器結構(Browser/Server,即B/S結構),瀏覽器通過Web服務器同數據庫進行數據交互。用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在服務器端實現,形成所謂3層結構(即數據層、中間層和表示層)。B/S結構,主要是利用了不斷成熟的WWW瀏覽器技術,結合瀏覽器的多種Script語言(VBScript、JavaScfipt…)和ActiveX技術,用通用瀏覽器就實現了原來需要復雜專用軟件才能實現的強大功能,并節約了開發成本,是一種全新的軟件系統構造技術。隨著Windows 2000/XP將瀏覽器技術植入操作系統內部,這種結構更成為當今應用軟件的首選體系結構(參見圖1)。

如圖1所示,中間件(Middle Ware)負責管理Web服務器和數據庫之間的通信并提供應用程序服務,它能直接調用外部程序或腳本代碼來訪問數據庫,提供與數據庫相結合的動態HTML頁面,然后通過Web服務器返回給用戶瀏覽器。數據庫服務器負責管理駐留在數據庫服務器中的數據。
由于數據庫訪問技術發展得非??欤瑥腛DBC,JDBC,OLE DB到ADO,隨著Web交互性的日益提高和應用的日益廣泛,對于中間層的需求也越來越突出。中間層是一個邏輯層,數據訪問組件通常就在這一層上,而數據訪問組件是惟一有必要了解數據庫細節的代碼。實現這些要求,ADO技術是一個理想的選擇。
但是隨著應用程序開發技術的發展,Web應用程序模型越來越松散地耦合:采用可擴展標記語言(XML,ExtensibleMarkup Language),將數據編碼并在網絡連接間傳遞;數據庫連接通常都是斷開的;Web應用程序使用HTTP在層間進行通信,必須顯式地處理請求之間的狀態維護等。這些特點使得基于組件對象模型(COM,Component Object Model)的ADO很難在一個分布式、異種平臺構成的環境中使用記錄集,對Internet上的高度分布式環境來說它更顯得有些煩瑣或不合適。而微軟的NET架構下的ADO.NET技術正好滿足這一切。
2 ADO.NET體系結構
.NET框架是微軟公司推出的一個基于XML技術的開發分布式應用的平臺。在NET框架中,ADO.NET是ASP.NET和Windows Forms應用訪問各種數據(如RDBMS,XML文檔)的標準服務,可以使用ADO.NET訪問各種不同類型的數據源。
ADO.NET支持不同的開發需求,例如前端數據庫客戶和由應用程序、工具、語言或Internet瀏覽器使用的中間商業對象等。ADO.NET提供對Microsoft SQL Server等數據源以及通過OLE DB和XML公開的數據源的一致訪問。數據共享使用者應用程序可以使用ADO.NET來連接到這些數據源,并檢索、操作和更新數據。
ADO.NET將數據訪問分解為多個可以單獨使用或一前一后使用的不連續組件。ADO.NET包含用于連接到數據庫、執行命令和檢索結果的.NET Framework數據提供程序,可以直接處理檢索到的結果,或將其放入ADO.NET DataSet對象,以便與來自多個源的數據或在層之間進行遠程處理的數據組合在一起,以特殊方式向用戶公開。ADO.NET的DataSet對象也可以獨立于.NET Framework供程序使用,以管理應用程序的本地數據或源自XML的數據。

設計ADO.NET的目的一是為了滿足以下這一新編程模型的要求:具有斷開式數據結構;能夠與XML緊密集成;具有能夠組合來自多個不同數據源的數據的通用數據表示形式;以及具有為與數據庫交互而優化的功能。二是為了從數據操作中分解出數據訪問。通過ADO.NET的兩個核心組件來完成此任務:DamSet和.NET Framework數據提供程序,后者是一組包括Connection,Command,DataReader和DataAdapter對象在內的組件。ADO.NET結構如圖2所示。
Dataset是ADO.NET的斷開式結構的核心組件,是為了實現獨立于任何數據源的數據訪問而設計的。因此,它可以用于多種不同的數據源,用于XML數據,或用于管理應用程序本地的數據。DamSet包含一個或多個DataTable對象的集合,這些對象由數據行和數據列以及主鍵、外鍵、約束和有關DataTable對象中數據的關系信息組成。
ADO.NET結構的另一個核心元素是.NET Framework數據提供程序,它是為了實現數據操作和對數據的快速、只進、只讀訪問而設計的。Connection對象提供與數據源的連接;Command對象使用戶能夠訪問用于返回數據、修改數據、運行存儲過程以及發送或檢索參數信息的數據庫命令;DataReader從數據源中提供高性能的數據流;DataAdapter提供連接DataSet對象和數據源的橋梁。DataAdapter使用Command對象在數據源中執行SQL命令,以便將數據加載到DataSet中,并使對DataSet中數據的更改與數據源保持一致。
.NET Framework提供了四個.NET Framework數據提供程序:SQLServer.NET Framework數據提供程序、OLE DB.NETFramework數據提供程序、ODBC.NET Framework數據提供程序和Oracle.NET Framework數據提供程序。可以為任何數據源編寫.NET Framework數據提供程序。

3 傳統數據庫存取模式
作為Microsoft.NET平臺的一部分,ASP.NET提供了最簡便、最具有擴展能力的方式來開發、部署和運行可以將任何瀏覽器或設備作為目標的Web應用程序。其中,它對數據庫操作是通過數據庫訪問類ADO.NET實現的。利用ADO.NET提供的組件,可以方便地進行數據庫的存取。
一般在ASPNET中對數據表的操作流程為:先聲明表的結構,建立數據表,然后為每個數據表建立一個類,定義各種數據庫操作函數,在應用程序中如果要對該表操作,則調用該類中增、刪、改的操作。在這種傳統的數據訪問模式下的數據庫操作框架圖詳見圖3。

如圖3所示,一個數據集中有一個數據表的集合。每一個表在程序中都要給出聲明,并給該表添加數據項及其類型;然后對該表建立存儲過程,編寫增加、刪除和修改函數;建立存儲過程,仍然需要對該表的每個數據項聲明一個參數,并注明參數類型和長度。由此可見,這樣的操作雖然結構比較清晰,但是增加了開發的工作量,而且不利于程序的維護,如果表的結構出現變動,則相關的多處需要被修改。
4 改進數據訪問模式
與傳統的方法不同,新的設計不是為每個表建立一個類,而是編寫一個通用的類來完成所有表的基本操作。改進的數據訪問模式下的基本實現框架圖如圖4所示。
在圖4改進的數據訪問模式中,給項目添加了一個組件類,在類中編寫公用函數代碼分別實現添加、更新、顯示數據庫中的單表數據。本文以asp.net(C#)和SQL SERVER 2000為開發平臺。以插入數據為例,下面將分別給出這些函數設計的部分代碼:

