在NET框架下開發(fā)三層結構數(shù)據(jù)庫應用系統(tǒng)_第1頁
在NET框架下開發(fā)三層結構數(shù)據(jù)庫應用系統(tǒng)_第2頁
在NET框架下開發(fā)三層結構數(shù)據(jù)庫應用系統(tǒng)_第3頁
在NET框架下開發(fā)三層結構數(shù)據(jù)庫應用系統(tǒng)_第4頁
在NET框架下開發(fā)三層結構數(shù)據(jù)庫應用系統(tǒng)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、在.NET框架下開發(fā)三層結構數(shù)據(jù)庫應用系統(tǒng)第 1 章:三層結構在企業(yè)中的應用三層:表示層:1.數(shù)據(jù)展示(顯示數(shù)據(jù))。2.接收數(shù)據(jù)。用于顯示數(shù)據(jù) 和 接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作界面。(一般為Windows應用程序或Web應用程序) 業(yè)務邏輯層:1.業(yè)務邏輯處理。2.數(shù)據(jù)傳遞。 是表層和數(shù)據(jù)訪問層之間通信的橋梁,主要負責 數(shù)據(jù)的傳遞和處理。(1.規(guī)則對數(shù)據(jù)進行加工和處理。2.與相鄰的表示層和數(shù)據(jù)庫訪問層進行數(shù)據(jù)交換。) 數(shù)據(jù)訪問層:主要實現(xiàn)對數(shù)據(jù)的保存和讀取操作。 數(shù)據(jù)訪問,可以訪問關系數(shù)據(jù)庫、本文件或是XML文檔等。數(shù)據(jù)訪問層通常為類庫。二層結構的局限性:1. 難以適應需求變化

2、。 2. 不易維護。 3. 安全性低。三層之間的依賴關系:表示層 依賴 業(yè)務邏輯層。業(yè)務邏輯層 依賴 數(shù)據(jù)訪問層。 表示層只允許引用業(yè)務邏輯層,不允許直接引用數(shù)據(jù)訪問層。 各層項目間不允許循環(huán)引用。1. 接收用戶的請求,根據(jù)用戶的請求去通知業(yè)務邏輯層;業(yè)務邏輯層收到請求,首先對請求進行閱讀審核,然后將請求通知數(shù)據(jù)庫訪問層或直接返回給表示層;數(shù)據(jù)訪問層收到請求后便開始訪問數(shù)據(jù)庫。2. 數(shù)據(jù)訪問層通過對數(shù)據(jù)庫的訪問得到請求的結果,并把請求結果通知業(yè)務邏輯層;業(yè)務邏輯層收到請求結果,首先對請求結果進行閱讀審核,然后將請求結果通知表示層;表示層收到請求結果,并將結果展示給用戶。搭建三層結構基本框架的步

3、驟:1. 搭建表示層。 2. 搭建業(yè)務邏輯層。 3. 搭建數(shù)據(jù)訪問層。 4. 添加各層之間的相互依賴。第 2 章: 用ADO.NET實現(xiàn)三層結構DataSet:在內存中存在的臨時數(shù)據(jù)庫。(表的集合(列,行,約束)以及表之間的關系的集合)DataSet的主要作用:三層之間數(shù)據(jù)傳遞的載體。在三層結構中,DataSet的構建與解析工作主要在表示層、數(shù)據(jù)訪問層,業(yè)務邏輯層主要對DataSet中的數(shù)據(jù)進行加工、處理和傳遞。(DataSet是整個三層結構中數(shù)據(jù)傳遞的介質)。1、表示層 使用DataSet需要做的兩件事:(1)將DataSet中的數(shù)據(jù)展示給用戶。一般我們可以直接將DataSet或DataTa

4、ble綁定到DataSource屬性上就可以實現(xiàn)數(shù)據(jù)展示。(2)、將用戶的請求數(shù)據(jù)填充到DataSet中。2、業(yè)務邏輯層 使用DataSet需要做的兩件事:(1)、將接收到的DataSet傳遞到下一層。當業(yè)務邏輯層收到數(shù)據(jù)訪問層返回的DataSet 后接著將DataSet 傳遞給表示層,或者是 將表示層請求的DataSet傳遞給數(shù)據(jù)訪問層。(2)、根據(jù)用戶請求對DataSet中的數(shù)據(jù)進行處理。當業(yè)務邏輯層收到請求或響應的DataSet后,根據(jù)用戶的請求(例如:條件篩選數(shù)據(jù))或業(yè)務規(guī)則會對DataSet中的數(shù)據(jù)進行處理。3、數(shù)據(jù)訪問層 使用DataSet需要做的兩件事:(1)、將數(shù)據(jù)庫中的數(shù)據(jù)填

5、充到DataSet中。當用戶的請求是查詢請求時,數(shù)據(jù)訪問層需要實現(xiàn)對數(shù)據(jù)庫的查詢訪問,并將響應結果填充到DataSet中。(2)、將DataSet中的數(shù)據(jù)保存到數(shù)據(jù)庫中。當用戶的請求是數(shù)據(jù)保存時,數(shù)據(jù)訪問層首先對收到的DataSet 進行解析,然后將解析出的數(shù)據(jù)保存到數(shù)據(jù)庫中。每層中基本上包括了:1.創(chuàng)建DataSet 。 2.填充數(shù)據(jù)。 3.傳遞DataSet。 4.從DataSet中提取數(shù)據(jù)。數(shù)據(jù)訪問層主要使用的類:1. SqlConnection類:實現(xiàn)數(shù)據(jù)庫連接。 2. SqlCommand類:執(zhí)行SQL命令。 3. SqlDataReader類:讀取數(shù)據(jù)。 4. SqlDataAda

6、pter類:執(zhí)行SQL命令,返回DataSet。 5. DataSet類:封裝用戶請求數(shù)據(jù)。DataSet的構建有兩種方法:1. 通過DataAdapter(數(shù)據(jù)適配器)的Fill 方法將數(shù)據(jù)直接填充到DataSet 中。2. 通過手動編碼自定義DataTable(數(shù)據(jù)表)、DataColumn(數(shù)據(jù)列)、DataRow(數(shù)據(jù)行),然后將數(shù)據(jù)表添加到DataSet中。一個DataSet是由多個DataTable組成,而一個DataTable又是由多個DataColumn和多個DataRow組成 。(1)、DataTable(數(shù)據(jù)表):是內存中的一個關系數(shù)據(jù)表,可以獨立創(chuàng)建使用,也可以作為Dat

7、aSet的一個成員使用。(指定表名時一定要避免表名重復)。(2)、DataColumn(數(shù)據(jù)列):是創(chuàng)建DataTable 的基礎,我們通過向DataTable中添加一個或多個DataColumn對象來定義DataTable的結構。DataColumn的常用屬性:屬 性說 明AllowDBNull是否允許空值ColumnNameDataColumn的名稱DataType存儲的數(shù)據(jù)類型MaxLength獲取或設置文本列的最大長度DefaultValue默認值Table所屬的DataTable的名稱UniqueDataColumn的值是否唯一定義DataColumn有三種方法:1. object

8、obj = new object();obj.GetType缺點:必須實例化對象,才能獲得。2. (“字段名”,typeof(string));3. Type.GetType(”System.String”);最為靈活(反射:動態(tài)獲取不同類型的信息)。(3)、DataRow(數(shù)據(jù)行)DataRow表示DataTable中包含的實際數(shù)據(jù),我們可以通過DataRow將數(shù)據(jù)添加到用DataColumn定義好的DataTable中。自定義DataSet的主要步驟:1.創(chuàng)建DataSet對象。 2.創(chuàng)建DataTable對象。 3.創(chuàng)建DataColumn對象構建表結構。 4.將創(chuàng)建好的表結構添加到表中

9、。 5.創(chuàng)建DataRow對象新增數(shù)據(jù)。 6.將數(shù)據(jù)插入到表中。 7.將表添加到DataSet中。從DataSet中獲取數(shù)據(jù)有兩種方法:1、通過指定的DataSet中的具體DataTable的某行某列來獲取數(shù)據(jù)。 (1)通過表名,從DataSet中獲取指定的DataTable。 (2)通過索引,從DataTable中獲取指定的DataRow。 (3)通過列名,從DataRow中獲取指定列的數(shù)據(jù)。2、將DataSet中的數(shù)據(jù)直接綁定到數(shù)據(jù)展示控件上。DataView:為我們提供DataTable的動態(tài)視圖,并可以對動態(tài)生成的視圖中的數(shù)據(jù)進行排序篩選等操作。一個DataSet中可以有多個DataT

10、able,一個DataTable可以動態(tài)生成多個DataView。(DataSet中包含DataTable,DataTable中包含DataView)DataView的常用屬性:屬 性說 明Table用于獲取或設置源DataTable。Sort獲取或設置DataView的一個或多個排序列以及排序順序。RowFilter獲取或設置用于篩選在DataView中查看哪些行的表達式。Count在應用RowFilter后,獲取DataView中的行數(shù)。用ADO.NET執(zhí)行帶參數(shù)的SQL命令時,我們需要使用參數(shù)(Parameters)集合的Add方法為SQL命令添加參數(shù),包括參數(shù)名稱、參數(shù)類型。業(yè)務邏輯層

11、實現(xiàn)數(shù)據(jù)傳遞、處理時,首先引用數(shù)據(jù)訪問層,其次實例化數(shù)據(jù)訪問對象,最后調用數(shù)據(jù)訪問層功能,并實現(xiàn)數(shù)據(jù)處理。第 3 章: 用OOP實現(xiàn)三層結構使用DataSet開發(fā)三層結構有哪些局限性:(1) DataSet不具備良好的面向對象(OO)特性,使用起來不夠直觀、方便。(2) 對DataSet中的數(shù)據(jù)進行查找時容易出錯。(3) 由于DataSet的核心結構與數(shù)據(jù)庫的核心結構完全相同,所以它把數(shù)據(jù)結構完全暴露在表示層和業(yè)務邏輯層。使用實體類的主要好處有一個簡單的事實,即實體類是完全受我們控制的對象,它具有面向對象的基本特征。其實和DataSet一樣,業(yè)務實體也承載著一個數(shù)據(jù)載體的任務。實體類是業(yè)務對象

12、的基礎,它用面向對象的思考為我們消除了關系數(shù)據(jù)庫與對象之間的差異。實體類:描述一個業(yè)務實體的”類”(整個應用系統(tǒng)業(yè)務所涉及的對象)。業(yè)務實體 可以認為屬于 業(yè)務邏輯層。也可以將業(yè)務實體單獨作為一層稱為 業(yè)務實體層。表示層、業(yè)務邏輯層、數(shù)據(jù)訪問層都依賴于業(yè)務實體,各層之間數(shù)據(jù)的傳遞主要是實體對象(業(yè)務信息封裝在實體對象中)。在 表示層 使用實體類需要做的兩件事:1. 將解析實體對象中封裝的數(shù)據(jù)展示給用戶。當表示層接收到從業(yè)務邏輯層返回的實體對象,并將實體對象中封裝的信息展示給用戶時,表示層需要對實體對象中封裝的信息進行解析。表示層對實體對象的解析分為兩種:(1) 對單個實體對象進行解析:每個實體

13、對象中封裝的數(shù)據(jù)對應數(shù)據(jù)表中的一條記錄。(2)對實體對象集合進行解析:將多個實體對象封裝到List<T>中稱為 實體對象集合。2. 將用戶請求的數(shù)據(jù)封裝到實體對象中。 在表示層,我們如何將用戶的請求的數(shù)據(jù)封裝到實體對象中,我們首先需要實例化實體對象,然后將用戶的請求數(shù)據(jù)賦值給實體對象中的對應的屬性。業(yè)務邏輯層 實體類的使用不同于表示層,它主要負責傳遞實體對象,并對實體對象中封裝的數(shù)據(jù)進行處理。它同樣需要做兩件事:1. 將接收到的實體對象傳遞給下一層。 當業(yè)務邏輯層接收到裝有信息的業(yè)務實體對象后,根據(jù)請求或響應將實體對象傳到下一層。2. 根據(jù)用戶的請求對實體對象中的數(shù)據(jù)進行處理。 (

14、1)一方面來自業(yè)務實體對數(shù)據(jù)的處理,實體類本身是由屬性組成的,而大多都是可讀寫屬性。所以根據(jù)請求的不同可以給屬性設置不同的值。 (2)另一方面來自業(yè)務邏輯對數(shù)據(jù)的處理。在數(shù)據(jù)訪問層使用實體類需要做兩件事:1. 將數(shù)據(jù)庫中的數(shù)據(jù)封裝到實體對象中或將多個實體對象封裝成集合。 當用戶的請求數(shù)據(jù)是數(shù)據(jù)查詢請求時,數(shù)據(jù)訪問層需要實現(xiàn)對數(shù)據(jù)庫的查詢訪問。 當請求的結果只有一條記錄時,我們將這條記錄封裝成一個實體對象。 當請求的結果是多條記錄時,我們將每條記錄封裝成一個實體對象,然后再將多個實體對象封裝成集合(將多個實體對象封裝到List<T>中)。2. 將實體對象中的數(shù)據(jù)保存到數(shù)據(jù)庫中。 當用

15、戶的請求是數(shù)據(jù)保存請求時,數(shù)據(jù)訪問層首先對實體類中封裝的數(shù)據(jù)進行分析,然后將解析出的數(shù)據(jù)保存到數(shù)據(jù)庫中。使用實體類的好處:為我們整個項目的開發(fā)提供了很大的靈活性。它把數(shù)據(jù)庫中的表用面向對象的思想抽象成類,使數(shù)據(jù)作為對象來使用,消除了關系數(shù)庫與類之間的差別,在三層結構開發(fā)中使用實體類更有助于項目的維護、擴展、更體現(xiàn)三層結構開發(fā)的優(yōu)勢。(在數(shù)據(jù)庫中添加一個字段時,只需在實體層中添加一個字段,封裝,再修改SQL語句)根據(jù)數(shù)據(jù)表編寫實體類時,需注意的:1. 表中的每個字段,對應實體類中的一個protected類型的字段和一個public類型的屬性。2. 表中字段的類型要與屬性的類型相匹配。(數(shù)據(jù)庫中的

16、varchar、nvarchar類型對應C#中的String類型)3. 在我們編寫好的實體類前面一般要加上序列化屬性Serializable,它對實體類中的所有字段、屬性進行序列化處理。 序列化的主要目的:為了提高數(shù)據(jù)傳輸中的性能與安全性。Using關鍵字在C#中的用途:1. 作為指令,引用命名空間。2. 作為語句,用于定義一個范圍,在此范圍末自動釋放對象。Using(SqlConnection conn = new SqlConnection()常用數(shù)據(jù)訪問方法命名規(guī)范:方 法說 明Public int AddSutdent(Student student)學員賬戶創(chuàng)建public void

17、 DeleteStudentByLoginId (string loginID) 根據(jù)學員賬戶ID刪除學員信息Public void ModifyStudent (Student student) 更新學員信息方法Public IList<Student>GetAllStudents() 得到所有學員信息集合Public Student GetStudentByLoginID(string loginID)根據(jù)登錄ID得到學員信息(配置文件放在表示層內,被數(shù)據(jù)訪問層引用)。第 4 章: 異常處理與單元測試“異?!笔浅绦蛟趫?zhí)行時發(fā)生的錯誤,導致這種錯誤的原因有三個方面:1. 代碼錯誤,包括語法錯誤、邏輯錯誤,這是由開發(fā)人員造成的。2. 資源不可用,這是由系統(tǒng)訪問了未經(jīng)授權的資源而引起的錯誤。3. 公共語言運行庫,這是由CLR內部引起的錯誤。Exception 類:為我們提供了大量的捕獲、處理異常的方法。 Exception 類是所有異常的基類。Exception 類中封裝的異常處理由兩種:1. 由用戶程序執(zhí)行引發(fā)的異常,派生于ApplicationException類。2. 由公共語言運行庫引發(fā)的異常,派生于SystemException類。常見異常類型:E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論