2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第11章 數(shù)據(jù)庫編程,教學(xué)提示:在這一章中,主要向讀者介紹數(shù)據(jù)庫的基本概念、數(shù)據(jù)庫編程的常用技術(shù)以及結(jié)合數(shù)據(jù)庫操作的實例,使讀者能在Visual C++ .NET開發(fā)環(huán)境下掌握對數(shù)據(jù)庫操作的方法。本章將重點介紹數(shù)據(jù)庫的訪問技術(shù),如ODBC技術(shù)、ADO技術(shù),還介紹了如何配置數(shù)據(jù)源等。學(xué)習(xí)完這些內(nèi)容后,相信讀者對Visual C++ .NET環(huán)境下的數(shù)據(jù)庫編程將會有一個比較全面的了解。,教學(xué)目標:掌握數(shù)據(jù)庫的基本概念;掌握數(shù)據(jù)庫編程技術(shù)的

2、使用;掌握注冊數(shù)據(jù)源的方法;通過上機實踐,初步掌握上述內(nèi)容的靈活運用。,11.1 數(shù)據(jù)庫基本概念,11.1.1 數(shù)據(jù)庫、DBMS和SQL概念11.1.2 數(shù)據(jù)庫的幾種訪問技術(shù),,11.1.1 數(shù)據(jù)庫、DBMS和SQL概念,數(shù)據(jù)庫是數(shù)據(jù)的集合,它由一個或多個表組成。每一個表中都存儲了對一類對象的數(shù)據(jù)描述,表11.1就是一個典型的表。表的每一列描述了對象的一個屬性,如ID、NAME等,而表的每一行則是對一個對象的具體描述。一般將

3、表中的一行稱作記錄(record)或行(row),將表的每一列稱作字段(field)或列(column)。數(shù)據(jù)庫通常還包括一些附加結(jié)構(gòu)用來維護數(shù)據(jù)?,F(xiàn)在普遍使用的一種數(shù)據(jù)庫就是關(guān)系數(shù)據(jù)庫。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)的基本單位是關(guān)系,關(guān)系就是一張二維表,數(shù)據(jù)按行列有規(guī)則的排列、組織。,返回,表11.1 表的例子,返回,11.1.2 數(shù)據(jù)庫的幾種訪問技術(shù),Visual C++ .NET提供了多種訪問數(shù)據(jù)庫技術(shù),如下所示:●ODBC (Ope

4、n DataBase Connectivity)● MFC ODBC(Microsoft Foundation Classes ODBC)● DAO (Data Access Object)● OLE DB(Object Link and Embedding DataBase)● ADO、ADO .NET (ActiveX Data Object),返回,11.2 ODBC編程技術(shù)的使用,11.2.1 MFC的主要ODBC類

5、概述11.2.2 CDatabase類的使用11.2.3 CRecordset類的使用11.2.4 CRecordView類的使用,11.2.1 MFC的主要ODBC類概述,因為CArchive是基于文件的,所以在創(chuàng)建一個CArchive對象之前必須要打開一個文件,CArchive構(gòu)造函數(shù)的第一個參數(shù)就是文件指針,其原型如下:CArchive(CFile* pFile, UINT nMode, int nBufSize=

6、4096, void* lpBuf=NULL);,返回,11.2.2 CDatabase類的使用,函數(shù)CArchive::Close()用來關(guān)閉CArchive,在關(guān)閉之前要把緩沖區(qū)中的所有數(shù)據(jù)存入文件,關(guān)閉之后中斷CArchive對象與文件的聯(lián)系。當關(guān)閉后,不能用它進行任何讀寫操作。必須先關(guān)閉CArchive對象,再關(guān)閉與之相聯(lián)系的文件,否則會出錯;換言之,在關(guān)閉一個文件之前必須關(guān)閉與之相連的所有CArchive對象。,返回,11.

7、2.3 CRecordset類的使用,CRecordset類代表一個記錄集。該類是MFC的ODBC類中最重要、功能最強大的類。1. 動態(tài)集、快照、光標和光標庫2. 域數(shù)據(jù)成員與數(shù)據(jù)交換3. 記錄集的建立4. Requery成員函數(shù)5. 記錄的過濾和排序6. 滾動記錄7. 修改記錄8. 添加記錄9. 刪除記錄,返回,1. 動態(tài)集、快照、光標和光標庫,在多任務(wù)操作系統(tǒng)或網(wǎng)絡(luò)環(huán)境下,多個用戶可以共享同一

8、個數(shù)據(jù)源。共享數(shù)據(jù)的一個主要問題是如何協(xié)調(diào)各個用戶對數(shù)據(jù)源的修改。記錄集主要分為快照(Snapshot)和動態(tài)集(Dynaset)兩種,CRecordset類對這兩者都支持。這兩種記錄集的不同表現(xiàn)在它們對別的應(yīng)用改變數(shù)據(jù)源記錄采取了不同的處理方法。 快照型記錄集提供了對數(shù)據(jù)的靜態(tài)視圖??煺帐莻€很形象的術(shù)語,就好象對數(shù)據(jù)源的某些記錄照了一張照片一樣。 動態(tài)集提供了數(shù)據(jù)的動態(tài)視圖,當別的用戶修改或刪除了記錄

9、集中的記錄時,會在動態(tài)集中反映出來,當滾動到修改過的記錄時,對其所作的修改會立即反映到動態(tài)集中。 光標庫(Cursor Library)是處于ODBC驅(qū)動程序管理器和驅(qū)動程序之間的動態(tài)鏈接庫(ODBCCR32.DLL),光標庫的主要功能是支持快照以及為底層驅(qū)動程序提供雙向滾動能力。,返回,2. 域數(shù)據(jù)成員與數(shù)據(jù)交換,CRecordset類代表一個記錄集。用戶一般需要創(chuàng)建一個CRecordset的派生類,為派生的記錄集類

10、創(chuàng)建一批數(shù)據(jù)成員,這些數(shù)據(jù)成員與記錄的各字段相對應(yīng),被稱為字段數(shù)據(jù)成員或域數(shù)據(jù)成員。域數(shù)據(jù)成員用來保存某條記錄的各個字段,它們是程序與記錄之間的緩沖區(qū)。域數(shù)據(jù)成員代表當前記錄,當在記錄集中滾動到某一記錄時,框架自動地把記錄的各個字段復(fù)制到記錄集對象的域數(shù)據(jù)成員中。當用戶要修改當前記錄或增加新記錄時,程序先將各字段的新值放入域數(shù)據(jù)成員中,然后調(diào)用相應(yīng)的CRecordset 成員函數(shù),把域數(shù)據(jù)成員設(shè)置到數(shù)據(jù)源中。,返回,3. 記錄集的建

11、立,要建立記錄集,首先要構(gòu)造一個CRecordset派生類對象,然后調(diào)用Open成員函數(shù)查詢數(shù)據(jù)源中的記錄并建立記錄集。在Open函數(shù)中,可能會調(diào)用GetDefaulConnect和 GetDefaultSQL函數(shù)。函數(shù)的聲明為:CRecordset m_RecordSet_Name(CDatabase* pDatabase=NULL);,返回,4. Requery成員函數(shù),建立記錄集后,用戶可以隨時調(diào)用Requery成員函數(shù)來重新

12、查詢和建立記錄集。Requery有兩個重要用途:●使記錄集能反映用戶對數(shù)據(jù)源的改變。●按照新的過濾或排序方法查詢記錄并重新建立記錄集。在調(diào)用Requery之前,可調(diào)用CanRestart來判斷記錄集是否支持Requery操作。要記住Requery只能在成功調(diào)用Open后調(diào)用,所以程序應(yīng)調(diào)用IsOpen來判斷記錄集是否已建立。函數(shù)聲明為:virtual BOOL Requery ( ); throw ( CDBExceptio

13、n, CmemoryException );返回TRUE表明記錄集建立成功,否則返回FALSE。若函數(shù)內(nèi)部出錯則產(chǎn)生異常。,返回,5. 記錄的過濾和排序,CRecordset 類有兩個公共數(shù)據(jù)成員m_strFilter和m_strSort用來設(shè)置對記錄的過濾和排序。在調(diào)用Open或Requery前,如果在這兩個數(shù)據(jù)成員中指定了過濾或排序,那么Open和Requery將按這兩個數(shù)據(jù)成員指定的過濾和排序來查詢數(shù)據(jù)源。,返回,6. 滾動

14、記錄,CRecordset提供了幾個成員函數(shù)用來在記錄集中滾動,如下所示。當用這些函數(shù)滾動到一個新記錄時,框架會自動地把新記錄的內(nèi)容復(fù)制到域數(shù)據(jù)成員中?!駐oid MoveNext( );● void MovePrev( );● void MoveFirst( );● void MoveLast( );● void SetAbsolutePosition ( long nRows);,返回,7. 修改記錄,要修改當

15、前記錄,應(yīng)該按下列步驟進行:(1) 調(diào)用Edit成員函數(shù)。調(diào)用該函數(shù)后就進入了編輯模式,程序可以修改域數(shù)據(jù)成員。 (2) 設(shè)置域數(shù)據(jù)成員的新值。 (3) 調(diào)用Update完成編輯。Update把變化后的記錄寫入數(shù)據(jù)庫并結(jié)束編輯模式。,返回,8. 添加記錄,要向記錄集中添加新的記錄,應(yīng)該按下列步驟進行:(1) 調(diào)用AddNew成員函數(shù)。調(diào)用該函數(shù)后就進入了添加模式,程序可以把所有的域數(shù)據(jù)成員都設(shè)置成NULL。(2)

16、設(shè)置域數(shù)據(jù)成員。(3) 調(diào)用Update。Update把域數(shù)據(jù)成員中的內(nèi)容作為新記錄寫入數(shù)據(jù)源,從而結(jié)束添加。,返回,9. 刪除記錄,要刪除記錄集的當前記錄,應(yīng)該按下面兩步進行:(1) 調(diào)用Delete成員函數(shù)。該函數(shù)會同時給記錄集和數(shù)據(jù)源中當前記錄加上刪除標記。注意不要在一個空記錄集中調(diào)用Delete,否則會產(chǎn)生一個異常。(2) 滾動到另一個記錄上以跳過刪除記錄。,返回,11.2.4 CRecordView類的使用,C

17、RecordView(記錄視圖)是CFromView的派生類,它提供了一個表單視圖來顯示當前記錄。一個典型的記錄視圖如圖11.2所示,用戶可以通過表單視圖顯示當前記錄。通過記錄視圖,可以修改、添加和刪除數(shù)據(jù)。用戶一般需要創(chuàng)建一個CRecordView的派生類并在其對應(yīng)的對話框模板中加入控件。,,圖11.2 記錄視圖,返回,11.3 應(yīng)用數(shù)據(jù)庫,11.3.1 注冊數(shù)據(jù)源11.3.2 創(chuàng)建應(yīng)用程序11.3.3 添加資源和代碼,

18、11.3.1 注冊數(shù)據(jù)源,先建立一個Access數(shù)據(jù)庫,如圖11.3所示。為了簡便,只包含了一個表,表名為xs,內(nèi)容也比較簡單,將這個Access數(shù)據(jù)庫保存為文件student.mdb。,,圖11.3 Access數(shù)據(jù)庫,返回,ODBC應(yīng)用程序不能直接使用數(shù)據(jù)庫,用戶必須為要使用的數(shù)據(jù)庫注冊數(shù)據(jù)源。注冊數(shù)據(jù)源的工作由ODBC管理器完成,該管理器位于Windows控制面板的32位ODBC內(nèi)。下面為Access數(shù)據(jù)庫student.md

19、b注冊數(shù)據(jù)源。(1) 打開控制面板,打開管理工具,雙擊【數(shù)據(jù)源(ODBC)】圖標,則會顯示一個【ODBC數(shù)據(jù)源管理器】,如圖11.4所示。在管理器中選擇【用戶DSN】選項卡,該選項卡只對用戶可見,而且只能在用戶當前機器使用。,,返回,(2) 單擊【添加】按鈕,則會彈出一個【創(chuàng)建新數(shù)據(jù)源】對話框。在該對話框中選擇Microsoft Access Driver (*.mdb),然后單擊【完成】按鈕,如圖11.5所示。(3) 接下來

20、會顯示一個ODBC Microsoft Access安裝對話框,如圖11.6所示,該對話框用來把數(shù)據(jù)庫與一個數(shù)據(jù)源名連接起來。在【數(shù)據(jù)源名】文本框中輸入“My database for VC”,然后單擊【選擇…】按鈕,在隨后彈出的對話框中找到并選擇student.mdb。連續(xù)單擊【確定】按鈕后,一個名為My databaye for VC的新數(shù)據(jù)源就被注冊到了管理器中。,,返回,,圖11.4 ODBC數(shù)據(jù)源管理器,返回,,圖11.5

21、 【創(chuàng)建新數(shù)據(jù)源】對話框,返回,,圖11.6 【ODBC Microsoft Access安裝】對話框,返回,11.3.2 創(chuàng)建應(yīng)用程序,本程序具有瀏覽記錄集和修改記錄這兩個基本功能?,F(xiàn)在開始建立應(yīng)用程序。首先完成程序框架的建立,請按下面幾步進行:(1) 啟動Visual Studio .NET,指定一名為DBSample的MFC工程。(2) 選擇應(yīng)用程序類型,按如圖11.7所示進行設(shè)置。(3) 在左側(cè)選擇【數(shù)據(jù)庫支持】,

22、如圖11.8所示,進行數(shù)據(jù)庫的設(shè)置(4) 單擊【數(shù)據(jù)源】按鈕,在彈出的【選擇數(shù)據(jù)源】對話框中選擇【機器數(shù)據(jù)源】選項卡,并選中My database for VC數(shù)據(jù)源,如圖11.9所示。,返回,(5) 單擊【確定】按鈕,則會打開一個【登錄】對話框,如圖11.10所示。如果數(shù)據(jù)庫沒有密碼,直接單擊【確定】按鈕即可。(6) 這時出現(xiàn)選擇數(shù)據(jù)庫對象對話框,展開表,選擇xs表(圖11.11)。單擊【確定】按鈕退出。(7) 單擊【完

23、成】按鈕,建立工程。這時提示可能數(shù)據(jù)庫會有密碼,如圖11.12所示,這里直接確認,將在下面的介紹中處理這一情況。,返回,,圖11.7 設(shè)置程序類型,返回,,圖11.8 設(shè)置數(shù)據(jù)庫支持,返回,,圖11.9 選擇數(shù)據(jù)源,返回,,圖11.10 【登錄】對話框,返回,,圖11.11 選擇表,返回,,圖11.12 密碼提示,返回,11.3.3 添加資源和代碼,在【資源視圖】對話框中選擇Dialog,雙擊展開(圖11.13),選中IDD

24、_MYSAMPLE_ FORM打開(圖11.14)。按照表11.4所示進行配置。,返回,,圖11.13 資源列表,返回,,圖11.14 界面設(shè)計,返回,11.4 DAO編程技術(shù)的使用,11.4.1 如何選擇ODBC與DAO11.4.2 DAO應(yīng)用程序的編寫,,11.4.1 如何選擇ODBC與DAO,由于DAO可以訪問ODBC數(shù)據(jù)源,下面幾條可以作為DAO替代ODBC的理由:●在某些情況下可獲得更好的性能,特別是在訪問Mi

25、crosoft ●Jet(MDB)數(shù)據(jù)庫時?!衽cODBC兼容?!馜AO允許進行數(shù)據(jù)有效檢查?!馜AO允許用戶說明表與表之間的關(guān)系。 當然,DAO的出現(xiàn)并不意味著ODBC已經(jīng)過時了。如果用戶的工作必須嚴格限于ODBC數(shù)據(jù)源,尤其在開發(fā)Client/Server結(jié)構(gòu)的應(yīng)用程序時,用ODBC有較好的性能。,返回,11.4.2 DAO應(yīng)用程序的編寫,1. 編寫MFC DAO應(yīng)用程序的第一步2. 數(shù)據(jù)查看選擇3.

26、 帶有DAO的文檔和視圖4. DBMS選擇,返回,1. 編寫MFC DAO應(yīng)用程序的第一步,若要開始DAO應(yīng)用程序的編寫,必須做出兩項基本決定:●希望應(yīng)用程序內(nèi)如何顯示數(shù)據(jù):按窗體方式、按列表方式、按某些其他方式或不顯示數(shù)據(jù)?!裣M褂煤畏N數(shù)據(jù)庫管理系統(tǒng)(DBMS)。,返回,2. 數(shù)據(jù)查看選擇,MFC對不同的查看選擇提供不同程度的支持:●在窗口中一次顯示一個記錄。創(chuàng)建一個CDaoRecordView派生類,并將其連接到基于

27、指定表的CDaoRecordset。這使得●創(chuàng)建簡單的基于窗口的應(yīng)用程序變得非常容易。一次顯示多個記錄,可以相當容易地將CDaoRecordset連接到● CListView或者CTreeView。在單獨的窗口中或是在拆分窗口的窗格中同時顯示多個數(shù)據(jù)視圖。,返回,3. 帶有DAO的文檔和視圖,MFC應(yīng)用程序的最簡單結(jié)構(gòu)是管理MFC文檔對象中的數(shù)據(jù)和管理在視圖對象中單獨顯示該數(shù)據(jù)。但是,并不只限制于此結(jié)構(gòu)。其他選擇包括:(1)使

28、用視圖對象,但將文擋作為未使用的附加物處理。 (2)將數(shù)據(jù)直接繪制到CFrameWnd派生類的工作區(qū)。 (3)使應(yīng)用程序以對話框為基礎(chǔ)。,返回,4. DBMS選擇,DAO基于Microsoft Jet數(shù)據(jù)庫引擎。因此,DAO最適合用于Microsoft Jet(MDB)數(shù)據(jù)庫。DAO也支持訪問外部數(shù)據(jù)庫,包括某些可安裝的ISAM數(shù)據(jù)庫(數(shù)據(jù)庫引擎可直接讀取它)和ODBC數(shù)據(jù)源。這意味著可以使用DAO編寫與DBMS無關(guān)的應(yīng)用程序

29、,目標是任何Microsoft Jet數(shù)據(jù)庫引擎可直接讀取的數(shù)據(jù)庫,或者用戶有相應(yīng)ODBC驅(qū)動程序的數(shù)據(jù)源。,返回,11.5 自動注冊DSN和創(chuàng)建表,11.5.1 自動注冊DSN11.5.2 用ODBC創(chuàng)建表11.5.3 用DAO創(chuàng)建表,,11.5.1 自動注冊DSN,無論是用ODBC還是DAO類,在訪問ODBC數(shù)據(jù)源以前,都必須先注冊DSN。通過調(diào)用函數(shù)SQLConfigDataSource,可以實現(xiàn)自動注冊DSN。當然

30、,用DAO可以直接訪問一些常用的數(shù)據(jù)庫,而不必通過ODBC來訪問。,返回,11.5.2 用ODBC創(chuàng)建表,由于ODBC類不支持DDL(數(shù)據(jù)庫定義語言),所以只有通過ODBC API來創(chuàng)建表。程序需要調(diào)用CDatabase::ExecuteSQL來直接執(zhí)行SQL語句。,返回,11.5.3 用DAO創(chuàng)建表,由于DAO類直接支持DDL,所以用DAO類創(chuàng)建表比ODBC容易。DAO的CDaoTableDef類提供了對表結(jié)構(gòu)的定義,該類提供了創(chuàng)

31、建表的成員函數(shù)。,返回,11.6 ADO編程技術(shù)的使用,ADO是Microsoft數(shù)據(jù)庫應(yīng)用程序開發(fā)的接口,對于在Windows上編寫數(shù)據(jù)庫程序的程序員來說,ADO是最常使用的技術(shù)了,通過它可以非常簡單地實現(xiàn)數(shù)據(jù)庫的連接以及數(shù)據(jù)訪問。它被設(shè)計用來同新的數(shù)據(jù)訪問層OLE DB Provider一起協(xié)同工作,以提供通用數(shù)據(jù)訪問(Universal Data Access)。ADO向我們提供了一個高層的對OLE DB的自動封裝接口,它簡化了

32、數(shù)據(jù)訪問的過程,增加了數(shù)據(jù)訪問的靈活性。但是由于ADO是一組由微軟提供的COM組件是建立在微軟所提倡的COM體系結(jié)構(gòu)之上,它的所有接口都是自動化接口,所以在Visual C++ .NET中使用ADO時,要按照使用COM的方式來調(diào)用。在這里大概介紹一下Visual C++ .NET中如何調(diào)用ADO對數(shù)據(jù)庫進行訪問的。,,11.7 上 機 指 導(dǎo),在本次上機指導(dǎo)中,將針對前面幾節(jié)中的內(nèi)容進行實際上機練習(xí)。其主要內(nèi)容包括:使用數(shù)據(jù)庫編程技術(shù)

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論