葉文勝,滿學(xué)璐
(黃岡職業(yè)技術(shù)學(xué)院,湖北黃岡438002)
淺析VS2005數(shù)據(jù)存取層*
葉文勝,滿學(xué)璐
(黃岡職業(yè)技術(shù)學(xué)院,湖北黃岡438002)
對Visual Studio 2005的數(shù)據(jù)存取層進行分析,從而實現(xiàn)在此基礎(chǔ)上進一步編輯和擴展此代碼。Visual Studio 2005中提供了大量的向?qū)Зぉぬ貏e是在生成數(shù)據(jù)存取代碼方面;這些向?qū)Т蟠鬁p少了代碼的編寫量。
數(shù)據(jù)存取層;表單;數(shù)據(jù)控件;向?qū)?數(shù)據(jù)庫;連接;代碼
基于最新的Visual Studio 2005數(shù)據(jù)設(shè)計器,可以通過用戶驅(qū)動的向?qū)韯?chuàng)建代碼。但是,在點擊“Finish”按鈕后得到的代碼中往往包含了比以前版本中更多的抽象內(nèi)容。在此基礎(chǔ)上,只需使用例如表格適配器和類型化的數(shù)據(jù)集等頂層對象,最終得到的卻是一個更簡單、更好的中間層。更重要的是,你可以選擇把這個頂層API連接到自己的數(shù)據(jù)存取層,從而完成一個正規(guī)化多層系統(tǒng)。
在任何情況下,都應(yīng)該避免把大量的ADO.NET相關(guān)的表單代碼插入到ASP.NET頁面和Windows表單事件的code-behind中,應(yīng)堅持使用分層設(shè)計,并使用數(shù)據(jù)傳輸模式和有效的數(shù)據(jù)描述方式。但是,Visual Studio能夠提供數(shù)據(jù)集并自動生成ADO.NET代碼。另外,Visual Studio 2005還能夠為你提供數(shù)據(jù)集和定制對象并能自動生成一個能進行大幅定制的抽象層。
建一個基于表單的應(yīng)用程序,它能夠顯示并編輯來自Northwind數(shù)據(jù)庫多個表格的數(shù)據(jù)。表單上有一些數(shù)據(jù)綁定控件,還有幾個數(shù)據(jù)連接器控件。首先要添加BindingNavigator控件以便讓用戶在一個綁定數(shù)據(jù)源記錄中進行導(dǎo)航。這個BindingNavigator控件有一個類似于VCR的用戶接口,它僅負責(zé)從數(shù)據(jù)源選擇一個特定的記錄并使之可應(yīng)用于一個通用的編程接口。這個BindingNavigator控件不會拋出任何異常。綁定源組件的設(shè)計目的主要是為了簡化表單上的控件和綁定數(shù)據(jù)之間的綁定。另外,它還提供了許多其它類型的服務(wù)(如當(dāng)前狀態(tài)管理,改變通知,過濾等)。如前面提及,一個綁定源組件其實是在用戶接口元素和后端數(shù)據(jù)之間添加了一個間接層。你需要把該綁定源組件連接到一個物理數(shù)據(jù)源,然后把表單上的控件綁定到該綁定源。從這里開始,任何與數(shù)據(jù)源相關(guān)的數(shù)據(jù)交互都是通過這個綁定源實現(xiàn)的。典型的操作包括導(dǎo)航、檢索、排序、過濾和更新。實際上,.NET框架2.0中的一個綁定源組件是一個派生自類Binding-Source的類的實例。這種綁定源組件其實就是一個沒有用戶界面的組件,專門設(shè)計用于讓開發(fā)者從Visual Studio 2005內(nèi)部管理綁定對象,并且多數(shù)是以聲明方式實現(xiàn)的。
BindingSource類負責(zé)包裝一個數(shù)據(jù)源并通過自己的對象模型來表示該數(shù)據(jù)源。該基類有很多屬性,讀者可以找相關(guān)資料查閱。值得注意的是, BindingSource對象的設(shè)計目的是既用來管理簡單的數(shù)據(jù)綁定也應(yīng)用于復(fù)雜的數(shù)據(jù)綁定場所。這意味著,它合并了.NET框架1.x中CurrencyManager和PropertyManager的所有功能。為了實現(xiàn)這些功能并且使它們快速而容易地出現(xiàn)在用戶接口級,你可以使用BindingNavigator控件并且把它關(guān)聯(lián)到一個綁定源上。每當(dāng)用戶點擊類似于VCR的按鈕,綁定源上的 Position和Current屬性被更新并且激發(fā)CurrentChanged事件。就象在WindowsForms 1.x時期的數(shù)據(jù)綁定一樣,監(jiān)聽這些事件的控件接收通知并且能夠適當(dāng)更新各自的用戶接口。
為了把數(shù)據(jù)添加到Windows應(yīng)用程序,你首先要把一個BindingSource組件拖動到你的表單。然后,設(shè)置該組件的DataSource屬性。該組件存在許多可用的數(shù)據(jù)源,包括數(shù)組、集合和定制類型列表。典型情況下,列表都是在集合的基礎(chǔ)上擴展而成的,它們要實現(xiàn)下列任何接口:IBindingList,ITypedList或IListSource。在最開始,你的應(yīng)用程序沒有數(shù)據(jù)源—你必須要為之創(chuàng)建一個。當(dāng)你選擇BindingSource組件的DataSource屬性時,會遇到一個窗口,點擊彈出窗口底部的鏈接,從而啟動一個向?qū)б员惆岩粋€新的數(shù)據(jù)源添加到當(dāng)前工程。
此向?qū)е?Visual Studio 2005會詢問應(yīng)用程序想從哪里得到數(shù)據(jù)。存在三個可能的地方:
數(shù)據(jù)庫,外部Web服務(wù)或定制對象。如果你選擇了Web服務(wù),那么,Visual Studio 2005將打開“Add Web Reference”對話框以便讓你選擇使用一個本地的還是遠程的Web服務(wù)并且創(chuàng)建相應(yīng)的代理類。然后,將由你來檢索數(shù)據(jù)并且把它綁定到控件。同樣,你可以從工程引用的任何程序集內(nèi)選擇一個定制對象。
定制對象集合或Web服務(wù)的創(chuàng)作者負責(zé)設(shè)計并且使用他們喜歡的任何方法來實現(xiàn)對象模型。當(dāng)你選擇該數(shù)據(jù)庫選項時,Visual Studio 2005會為你生成大量的代碼。典型地,你需要添加一個DataSet組件,也即是通過一個XSD文件描述的一組相互關(guān)聯(lián)的表格。這個DataSet組件描述了一個具有一個或多個數(shù)據(jù)表格的內(nèi)存DataSet對象。
一個表格適配器為一個應(yīng)用程序與它的數(shù)據(jù)庫之間的通信提供支持。例如,一個表格適配器連接到一個數(shù)據(jù)庫并且執(zhí)行命令;任何返回的數(shù)據(jù)被存儲到一個DataTable對象中以備進一步處理??梢允褂靡粋€表格適配器來把更新內(nèi)容發(fā)送回數(shù)據(jù)庫。一個表格適配器是一個工具生成的類的實例。一個表格適配器只是在.NET托管的提供程序內(nèi)定義的適配器類的一個特例。簡言之,它是一個擔(dān)當(dāng)針對特定表格的適配器的包裝器對象。注意,表格適配器沒有基類。從內(nèi)部實現(xiàn)來看,一個表格適配器類合并了一個SqlCommand,SqlConnection和Sql-DataAdapter對象的功能。表格適配器類是用于實現(xiàn)數(shù)據(jù)存取的流行設(shè)計模式中的非常重要的元素之一。借助于CommandCollection屬性,表格適配器類能夠列出在表格上執(zhí)行的所有行為。簡言之,它定義了表格的“行為”。
一個表格適配器為一個應(yīng)用程序與它的數(shù)據(jù)庫之間的通信提供支持。例如,一個表格適配器連接到一個數(shù)據(jù)庫并且執(zhí)行命令;任何返回的數(shù)據(jù)被存儲到一個DataTable對象中以備進一步處理。
一個表格適配器類典型的定義形式如下:
內(nèi)部數(shù)據(jù)適配器是在 InitAdapter方法中初始化的。該方法是從Adapter屬性的get存取器內(nèi)進行調(diào)用的。
Visual Studio 2005提供的數(shù)據(jù)設(shè)計器向?qū)傻拇a基于經(jīng)典的TDG方法進行工作。使用向?qū)У年P(guān)鍵在于真正了解它相對你的需要實現(xiàn)了什么。Visual Studio 2005數(shù)據(jù)設(shè)計器創(chuàng)建了一種結(jié)構(gòu)化的有效的DAL,程序員必須理解它的代碼并著手編輯,但這種模式不適合復(fù)雜的應(yīng)用程序開發(fā)。
[1]John KauffmanBradley.Asp.net 2.0數(shù)據(jù)庫入門經(jīng)典[M].清華大學(xué)出版社,2007.
[2]吳雷.Visual Studio 2005高級編程[M].清華大學(xué)出版社,2008.
[3]魏菊霞.asp.net實踐教程[M].清華大學(xué)出版社,2009.
Analysis Data Access Layer of VS2005
YE Wen-Sheng,MAN Xue-Lu
(Huanggang Polytechnic University,Huanggang438002Hubei)
Analyzing the data access layer of the Visual Studio 2005 in order to achieve further editing and expansion of this code on the above basis.Visual Studio 2005 provides a number of wizards──especially in the generated data access code area,and the wizards significantly reduces the written amount of code.
Data Access Layer;Form;Data Control;Wizard,database;Connection;Code.
TP311.52
A
1672-1047(2010)04-0044-03
10.3969/j.issn.1672-1047.2010.04.12
[責(zé)任審校:秦春娥]
2010-05-27
葉文勝,男,系統(tǒng)分析師。E-mail:ywshgzy@hgpu.edu.cn.