




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第22章
數(shù)據(jù)庫和ADO.NET
在.NETFrameword中,對數(shù)據(jù)庫的訪問是通過ADO.NET來實現(xiàn)的。在VisualC++2008中,Windows窗體程序提供了高度的自動化訪問數(shù)據(jù)庫的功能,開發(fā)人員只需要向窗體添加幾個數(shù)據(jù)控件,就可以完成對數(shù)據(jù)庫的訪問。但是為了加深理解,本章首先介紹如何手動添加代碼使用ADO.NET訪問數(shù)據(jù)庫,然后使用VisualC++2008為我們提供的數(shù)據(jù)控件實現(xiàn)與數(shù)據(jù)源的綁定。了解ADO.NETADO.NET數(shù)據(jù)提供者和使用者DataReader的使用使用DataSet讀、寫數(shù)據(jù)多表訪問使用數(shù)據(jù)控件控件綁定到數(shù)據(jù)源
22.1ADO.NET概述
ADO.NET是.NETFramework中用于訪問數(shù)據(jù)源的類庫名。通過ADO.NET,在應(yīng)用程序中可以訪問關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)源。由于ADO.NET被集成到.NETFramework中,因此對于任何.NET語言,其使用方法基本相同。ADO.NET類包括在System::Data命名空間及其嵌套的子命名空間中,以及System::Xml命名空間中。在物理上,ADO.NET類位于System.Data.dll程序集和相關(guān)的System.Data.xxx.dll程序集中。
22.1.1ADO.NET的設(shè)計目標(biāo)
為了適應(yīng)當(dāng)今這種設(shè)計模式,Microsoft為數(shù)據(jù)訪問提供了一種全新的編程模型,此模型是基于.NET框架生成的。它實現(xiàn)了:斷開連接模型、與XML緊密集成、能夠組合來自多個不同數(shù)據(jù)源的數(shù)據(jù)并用通用數(shù)據(jù)表示。下面簡要介紹一下ADO.NET的設(shè)計目標(biāo):1.簡單地訪問關(guān)系數(shù)據(jù)和非關(guān)系數(shù)據(jù)2.可擴展性3.支持多層應(yīng)用程序4.集成XML支持
22.1.2ADO.NET體系結(jié)構(gòu)
在分布式應(yīng)用程序中,常常需要處理斷開連接的數(shù)據(jù)。斷開連接模型意味著,一旦獲取所需的數(shù)據(jù),就會斷開對數(shù)據(jù)源的連接,在本機上處理數(shù)據(jù)。該模型之所有普遍,是因為它釋放了寶貴的數(shù)據(jù)庫服務(wù)器資源。為了更好地支持斷開連接模型,ADO.NET將數(shù)據(jù)訪問和數(shù)據(jù)處理進行了分離。它是通過兩個主要的組件:DataSet和.NET數(shù)據(jù)提供程序來實現(xiàn)的,圖22-1演示了數(shù)據(jù)訪問與數(shù)據(jù)處理分離的概念。
22.1.3System::Data命名空間
使用ADO.NET的第一步就是引用System::Data命名空間,其中包含有所有的ADO.NET類。在System::Data命名空間的各個子命名空間提供了針對不同的數(shù)據(jù)源的.NET數(shù)據(jù)提者。1.SQLServer.NET數(shù)據(jù)提供者2.Oracle.NET數(shù)據(jù)提供者3.OLEDB.NET提供者4.ODBC.NET數(shù)據(jù)提供者5.其他內(nèi)置的.NET數(shù)據(jù)提供者22.3使用DataSet
前面介紹了如何使用DataReader讀取數(shù)據(jù),但是,DataReader只能從數(shù)據(jù)庫中獲取一個只讀、僅前向數(shù)據(jù)流,它只能從頭到尾地讀取記錄,不能向后導(dǎo)航記錄,并且不能對數(shù)據(jù)源進行更新操作。本節(jié)將使用ADO.NET的核心對象DataSet完成數(shù)據(jù)源的讀寫操作。
22.3.1讀取數(shù)據(jù)
DataSet提供一種非連接模式的數(shù)據(jù)訪問機制,非連接模式就是一次數(shù)據(jù)源中的數(shù)據(jù)讀取到內(nèi)存,然后斷開連接進行離線處理,最后創(chuàng)建新連接將修改后的數(shù)據(jù)返回到數(shù)據(jù)源中。DataSet是ADO.NET中最復(fù)雜的一個對象,它可以包含一個或多個DataTable對象,每個DataTable對象都有一些子對象DataRow和DataColumn,表示數(shù)據(jù)庫中的行和列,通過這些對象可以獲取表、行和列中的所有數(shù)據(jù)。DataSet對象有一個Tables集合屬性,該屬性為DataTableCollection類型,它的每個成員都是DataTable對象,它有一個重載的索引符,可以使用如下兩種方法訪問每個DataTable:按表名訪問DataSet->Tables("Customers")訪問指定的DataTable對象按索引訪問DataSet->Tables(0)訪問DataSet中第一個DataTable對象。在每個DataTable中,都有一個Rows屬性,它是DataRow對象的集合。Rows的類型為DataRowCollection,它是一個有序列表,按行號排序。這意味著可以通過在Rows屬性中指定行號,逐行訪問包含在DataTable中的數(shù)據(jù)。
22.3.2修改數(shù)據(jù)現(xiàn)在使用DataSet已經(jīng)可以從數(shù)據(jù)源中讀取數(shù)據(jù),接下來將通過DataSet修改數(shù)據(jù)源。在修改數(shù)據(jù)源需要兩個步驟:首先修改DataSet或DataTable中的記錄,然后再將修改保存回數(shù)據(jù)庫。1.向DataTable添加新行要向DataTable添加新行,首先要調(diào)用DataTable類的NewRow()函數(shù)創(chuàng)一個新的DataRow對象。2.修改DataTable中的數(shù)據(jù)修改DataTable中某行的數(shù)據(jù)也很簡單,這個過程只需要使用Rows集合。3.從DataTable中刪除數(shù)據(jù)要從DataTable中刪除某行數(shù)據(jù),可以調(diào)用DataRow類的Delete()方法。
22.3.3保存DataSet對數(shù)據(jù)的修改
在目前為止,已經(jīng)成功地修改了包含在DataTable中的數(shù)據(jù)。但是,由于DataSet及其中的DataTable處于非連接模式,因此必須使用DataAdapter顯式地把修改保存回數(shù)據(jù)庫。下面列舉了幾個與保存數(shù)據(jù)到數(shù)據(jù)庫有關(guān)的成員: (1)DataAdapte的InsertCommand,UpdateCommand和DeleteCommand屬性包含分別用來添加、修改和刪除記錄的SQL語句。 (2)DataAdapter->Update()函數(shù)為DataSet中每個已插入、已更新或已刪除的行調(diào)用相應(yīng)的INSERT、UPDATE或DELETE語句。 (3)DataRow->RowState屬性標(biāo)記該行的狀態(tài)。DataAdapter使用該信息來確定要更新到的數(shù)據(jù)庫中的行。
22.4在DataSet中訪問多個表
在數(shù)據(jù)庫中的表并不是孤立存在,表與表之間或多或少都存在一個的關(guān)聯(lián)關(guān)系。而ADO.NET模型與原類的數(shù)據(jù)訪問模型相同,有一個最大的優(yōu)點,就是DataSet對象可以記錄多個表和它們之間的關(guān)系。
22.1.1ADO.NET中的關(guān)系
在DataSet中,兩個DataTable之間的關(guān)系用DataRelation表示。每個DataSet都包含DataRelations的Relations集合,以便查找和操作相關(guān)的表。對于Customers和Orders表,每個客戶都可以下幾個訂單;但如何才能看到由每一個客戶下的所有訂單呢?在Orders表中,每一行都包含下訂單所屬客戶的CustomerID。這樣就可以將包含特定CustomerID的所有訂單行匹配Customer表中該客戶的行。兩個表中匹配的CustomerID字段定義了Customer表和Orders表之間的一對多的對應(yīng)關(guān)系。創(chuàng)建一個代表這種關(guān)系的DataRelations對象后,就可以在ADO.NET中使用表之間的關(guān)系。
22.1.2導(dǎo)航關(guān)系
使用關(guān)系可以從一張表的行進入到另一張表中的關(guān)聯(lián)行,這就是對關(guān)系導(dǎo)航。通常導(dǎo)航是指從一張表的父行進入另一張表的子行。但導(dǎo)航也可以按相反的方向進行。給定父表中的一行,通過關(guān)系DataRelation可以獲取子表中與其對應(yīng)的所有行。ADO.NET在DataRow類中提供了一個函數(shù)GetChildRows(),通過調(diào)用該函數(shù)可以提取子表中對應(yīng)的行。
22.5使用數(shù)據(jù)控件
前面我們通過手工編寫代碼訪問數(shù)據(jù)據(jù),事實上,在System::Windows::Forms命名空問內(nèi)定義了表22-5中的三個控件,使用它們可以在WindowsForms應(yīng)用程序中可以很容易訪問并顯示數(shù)據(jù)。
22.5.1DataGridView控件
DataGridView控件以類似于電子表格的方式顯示所有的記錄。通過DataGridView控件對象的相關(guān)屬性可以引用表格的行和列。1.向DataGridView控件添加數(shù)據(jù)DataGridView控件中的數(shù)據(jù)存儲在由該控件的Rows和Columns屬性標(biāo)識的矩陣中。2.定制DataGridView控件使用DataGridView控件可以輕松定義它的顯示格式。通過設(shè)置DataGridViewCellStyle對象的屬性,可以為特定單元格、為特定列和行中的單元格或者為控件中的所有單元格定義外觀和格式樣式。3.DataGridView綁定到數(shù)據(jù)源DataGridView控件提供了一個非常重要的屬性DataSource,通過設(shè)置該屬性可以指定在DataGridView中顯示的數(shù)據(jù)源。
22.5.2數(shù)據(jù)綁定
BindingSource組件是作為窗體上的控件與數(shù)據(jù)源中的表之間的媒介存在??梢詫⒃摻M件綁定到顯示表內(nèi)容的DataG
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件升級及維護合同
- 交通協(xié)管員聘用合同協(xié)議書
- 家禽購銷合同
- 貨品抵款結(jié)算協(xié)議書
- 應(yīng)對市場變化的解決方案研究
- 蘭州房屋租賃合同
- 機械租賃協(xié)議合同
- 第19課 治學(xué)須有疑無疑不成學(xué)-《懷疑與學(xué)問》(教學(xué)設(shè)計)九年級語文上冊同步高效課堂(統(tǒng)編版)
- 第一單元學(xué)習(xí)任務(wù)《如何闡述自己的觀點》教學(xué)設(shè)計 2023-2024學(xué)年統(tǒng)編版高中語文必修下冊
- Unit 4 Fun with numbers 第二課時(教學(xué)設(shè)計)-2024-2025學(xué)年外研版(三起)(2024)英語三年級上冊
- 2022年福建泉州中考英語真題【含答案】
- 汽車座椅骨架的焊接夾具畢業(yè)設(shè)計說明書(共23頁)
- 大學(xué)生安全教育課件(ppt共41張)
- 露天礦山職業(yè)危害預(yù)先危險分析表
- 淺談固定資產(chǎn)的審計
- WZCK-20系列微機直流監(jiān)控裝置使用說明書(v1.02)
- 連續(xù)平壓熱壓機 三篇 俞敏等
- 各種閥門CAD圖
- (完整版)錨桿、錨索格梁首件工程施工方案
- 2021最新整理食物嘌呤含量一覽表
- 自動化生產(chǎn)線機械手及分揀單元設(shè)計說明書
評論
0/150
提交評論