




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ADO數(shù)據(jù)庫編程,第七章,2,回顧,設(shè)計應(yīng)用程序菜單 為應(yīng)用程序添加快捷鍵 彈出式菜單的設(shè)計 工具欄編程 狀態(tài)欄編程 樹控件及列表控件的使用,3,本章目標,了解MFC下各種訪問數(shù)據(jù)庫的方式 主要掌握ADO主要導(dǎo)出接口 掌握使用ADO進行數(shù)據(jù)庫操作,4,ODBC、DAO和OLE DB,ODBC(開放數(shù)據(jù)庫接口 )是一種標準的基于SQL的接口,它提供了應(yīng)用程序與數(shù)據(jù)庫之間的接口,使得任何一個數(shù)據(jù)庫都可以通過ODBC驅(qū)動程序與指定的DBMS相連 DAO使用Jet數(shù)據(jù)庫引擎形成一系列的數(shù)據(jù)訪問對象:數(shù)據(jù)庫對象、表和查詢對象、記錄集對象等??梢源蜷_一個Access數(shù)據(jù)庫文件(MDB文件),也可直接打開一個ODBC數(shù)據(jù)源以及使用Jet引擎打開一個ISAM(被索引的順序訪問方法)類型的數(shù)據(jù)源(dBASE、FoxPro、Paradox、Excel或文本文件)。 OLE DB試圖提供一種統(tǒng)一的數(shù)據(jù)訪問接口,并能處理除了標準的關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)之外,還能處理包括郵件數(shù)據(jù)、Web上的文本或圖形、目錄服務(wù)(Directory Services)以及主機系統(tǒng)中的IMS和VSAM數(shù)據(jù)。OLE DB提供一個數(shù)據(jù)庫編程COM(組件對象模型)接口,使得數(shù)據(jù)的使用者(應(yīng)用程序)可以使用同樣的方法訪問各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲地點、格式或類型。這個COM接口與ODBC相比,其健壯性和靈活性要高得多。,5,MFC ODBC技術(shù),MFC的ODBC類對較復(fù)雜的ODBC API進行了封裝,提供了簡化的調(diào)用接口 CDatabase類:主要功能是建立與數(shù)據(jù)源的連接,可以在整個應(yīng)用程序中共享這些信息。 CRecordset類:代表從數(shù)據(jù)源選擇的一組記錄。CRecordset類允許指定要運行的SQL查詢,它將運行查詢并維護自數(shù)據(jù)庫返回的記錄集??梢孕薷暮透掠涗?,還可增加、刪除記錄,并將所做的變動反饋到該數(shù)據(jù)庫中。 CRecordView類:提供了一個表單視圖與某個記錄集直接相連,利用對話框數(shù)據(jù)交換(DDX)機制在記錄集與表單視圖的控件之間傳輸數(shù)據(jù)。 CFieldExchange類:支持記錄字段數(shù)據(jù)交換(DFX),即記錄集字段數(shù)據(jù)成員與相應(yīng)的數(shù)據(jù)庫的標的字段之間的數(shù)據(jù)交換。 CDBException類:代表ODBC類產(chǎn)生的異常。,6,ADO,ADO是目前在Windows環(huán)境中比較流行的客戶端數(shù)據(jù)庫編程技術(shù)。它是Microsoft為最新和最強大的數(shù)據(jù)訪問范例OLE DB而設(shè)計的,是一個便于使用的應(yīng)用程序?qū)咏涌?。ADO使用戶應(yīng)用程序能夠通過“OLE DB提供者”訪問和操作數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)。由于它兼具有強大的數(shù)據(jù)處理功能(處理各種不同類型的數(shù)據(jù)源、分布式的數(shù)據(jù)處理等等)和極其簡單、易用的編程接口,因而得到了廣泛的應(yīng)用。 ADO技術(shù)基于COM(Component Object Model,組件對象模型),具有COM組件的許多優(yōu)點,可以用來構(gòu)造可復(fù)用應(yīng)用框架,被多種語言支持,能夠訪問包括關(guān)系數(shù)據(jù)庫、非關(guān)系數(shù)據(jù)庫及所有的文件系統(tǒng)。另外,ADO還支持各種B/S與基于Web的應(yīng)用程序,具有遠程數(shù)據(jù)服務(wù)RDS(Remote Data Service)的特性,是遠程數(shù)據(jù)存取的發(fā)展方向。,7,ADO對象模型,連接對象Connection 通過連接可以從應(yīng)用程序中訪問數(shù)據(jù)源。連接時必須指定要連接的數(shù)據(jù)源以及連接所使用的用戶名和用戶口令。 命令對象Command 可以通過已建立的連接發(fā)出命令,從而對數(shù)據(jù)源進行指定操作。一般情況下,命令可以在數(shù)據(jù)源中添加、修改或刪除數(shù)據(jù),也可以檢索數(shù)據(jù)。 參數(shù)對象Parameter 在執(zhí)行命令時可以指定參數(shù),參數(shù)可以在命令發(fā)布之前進行更改。例如,可以重復(fù)發(fā)出相同的數(shù)據(jù)檢索命令,但是每一次指定的檢索條件不同。 記錄集對象Recordset 查詢命令可以將查詢結(jié)果儲存在本地,這些數(shù)據(jù)以行為單位,返回數(shù)據(jù)的集合被稱為記錄集 字段對象Field 一個記錄集包含一個或多個字段。每一字段(列)都包含名稱、數(shù)據(jù)類型和值屬性。 錯誤對象Error 錯誤可隨時在程序中發(fā)生,通常是由于無法建立連接、執(zhí)行命令或?qū)δ承顟B(tài)的對象進行操作。 屬性對象Property,8,ADO的4種類型的集合,Connection對象具有Errors集合,包含為響應(yīng)與數(shù)據(jù)源有關(guān)的單一錯誤而創(chuàng)建的所有Error對象。 Command對象具有Parameters集合,包含應(yīng)用于Command對象的所有Parameter對象。 Recordset對象具有Fields集合,包含Recordset對象中所有列的Field對象。 Connection對象、Command對象、Recordset對象和Field對象都具有Properties集合,它包含各個對象的Property對象。,9,使用ADO創(chuàng)建數(shù)據(jù)庫應(yīng)用程序,在MFC應(yīng)用程序中使用ADO數(shù)據(jù)庫的一般過程是: 添加對ADO的支持; 創(chuàng)建一個數(shù)據(jù)源連接; 對數(shù)據(jù)源中的數(shù)據(jù)庫進行操作; 關(guān)閉數(shù)據(jù)源。,10,引入ADO庫,在Visual C+中,使用ADO開發(fā)數(shù)據(jù)庫之前需要引入ADO庫??梢栽赟tdAfx.h文件末尾處引入ADO庫文件 #endif / _AFX_NO_AFXCMN_SUPPORT #include / MFC support for Windows Common Controls #import “C:Program FilesCommon FilesSystemADOmsado15.dll“ no_namespace rename(“EOF“, “adoEOF“) #include /AFX_INSERT_LOCATION 預(yù)編譯命令#import是編譯器將此命令中所指定的動態(tài)鏈接庫文件引入到程序中,并從動態(tài)鏈接庫文件中抽取出其中的對象和類的信息。 icrsint.h文件包含了Visual C+擴展的一些預(yù)處理指令、宏等的定義,用于與數(shù)據(jù)庫數(shù)據(jù)綁定。,11,連接到數(shù)據(jù)庫2-1,在能夠使用ADO對象之前,必須為應(yīng)用程序初始化COM環(huán)境 BOOL CADOApp:InitInstance() :CoInitialize(NULL); AfxEnableControlContainer(); 建立數(shù)據(jù)庫的連接需要使用連接對象Connection。首先定義一個_ConnectionPtr類型指針,然后調(diào)用CreateInstance方法實例化,例如: _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(_uuidof(Connection);,12,連接到數(shù)據(jù)庫2-2,ADO使用Connection對象來建立與數(shù)據(jù)庫服務(wù)器的連接,它相當(dāng)于MFC中的CDatabase類。和CDatabase類一樣,調(diào)用Connection對象的Open即可建立與服務(wù)器的連接 函數(shù)原型:HRESULT Connection:Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) 參數(shù):ConnectionString為連接字串,UserID是用戶名,Password是登錄密碼,Options是選項,通常用于設(shè)置同步和異步等方式。_bstr_t是一個COM類,用于字符串BSTR(用于Automation的寬字符)操作。 不同的數(shù)據(jù),其連接字串有所不同:,13,Connection對象,Connection對象除了建立與數(shù)據(jù)庫服務(wù)器的連接外,還可以通過OpenSchema來獲取數(shù)據(jù)源的自有信息,如:數(shù)據(jù)表信息、表字段信息以及所支持的數(shù)據(jù)類型等。 OpenSchema方法中的adSchemaColumns是一個預(yù)定義的枚舉常量,用來獲取與“列”(字段)相關(guān)的信息記錄集。該信息記錄集的主要字段名有“TABLE_NAME”、“COLUMN_NAME”;類似的,若在OpenSchema方法中指定adSchemaTables枚舉常量,則返回的記錄集的字段名主要有“TABLE_NAME”、“TABLE_TYPE”。,14,Recordset對象,上述的OpenSchema函數(shù)返回的是記錄集指針_RecordsetPtr,對應(yīng)類型Recordset對象 _RecordsetPtr指針與數(shù)據(jù)庫是的游標類似,可以遍歷一到多個記錄集,常用指針指向操作有指向下一條記錄MoveNext()、指向上一條記錄MovePrevious ()、指向第一條記錄MoveFirst()、指向最后一條記錄MoveLast()、指向下一個記錄集NextRecordset() 訪問對應(yīng)字段記錄值用GetCollect (“字段名“)或 Fields-GetItem(“字段名“)-GetValue(),15,例子3-1,(1) 用MFC AppWizard創(chuàng)建一個默認的單文檔應(yīng)用程序Ex_ADO,但在向?qū)У牡?步將CEx_ADOView的基類由默認的CView選擇為CListView類,以便更好地顯示和操作數(shù)據(jù)表中的記錄。 (2) 在CEx_ADOView:PreCreateWindow函數(shù)添加下列代碼,用來設(shè)置列表視圖內(nèi)嵌列表控件的風(fēng)格: BOOL CEx_ADOView:PreCreateWindow(CREATESTRUCT /_ConnectionPtr、_RecordsetPtr和_CommandPtr分別是ADO對象Connection、Recordset和Command的智能指針類型。,16,3-2,void CEx_ADOView:OnInitialUpdate() CListView:OnInitialUpdate(); m_pConnection.CreateInstance(_uuidof(Connection); / 初始化Connection指針 m_pRecordset.CreateInstance(_uuidof(Recordset); / 初始化Recordset指針 m_pCommand.CreateInstance(_uuidof(Command); / 初始化Recordset指針 / 連接數(shù)據(jù)源為“Database Example For VC+“ m_pConnection-ConnectionString = “DSN=Database Example For VC+“; m_pConnection-ConnectionTimeout = 30; / 允許連接超時時間,單位為秒 HRESULT hr = m_pConnection-Open(“,“,“,0); if (hr != S_OK) MessageBox(“無法連接指定的數(shù)據(jù)庫!“); / 獲取數(shù)據(jù)表名和字段名 _RecordsetPtr pRstSchema = NULL; / 定義一個記錄集指針 pRstSchema = m_pConnection-OpenSchema(adSchemaColumns);/ 獲取表信息 / 將表信息顯示在列表視圖控件中 CListCtrl,17,3-3,for (int i=0; iadoEOF) str.Format(“%d“, nItem+1 ); m_ListCtrl.InsertItem( nItem, str ); for (int i=1; iFields-GetItem(_bstr_t)(LPCSTR)strHeaderi)-Value; m_ListCtrl.SetItemText( nItem, i, value ); pRstSchema-MoveNext(); nItem
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年體育休閑廣場項目智能化系統(tǒng)設(shè)計評估報告
- 藥品營銷培訓(xùn)管理制度
- 藥品陰涼冷藏管理制度
- 藥店醫(yī)保刷卡管理制度
- 藥店流動顧客管理制度
- 菊花技術(shù)文件管理制度
- 設(shè)備業(yè)務(wù)薪酬管理制度
- 設(shè)備加油規(guī)范管理制度
- 設(shè)備崗位合同管理制度
- 設(shè)備機房標準管理制度
- 2025至2030中國物理氣相沉積(PVD)設(shè)備行業(yè)行情監(jiān)測與發(fā)展動向追蹤報告
- 電力咨詢費合同協(xié)議
- 2025-2030海洋環(huán)境監(jiān)測行業(yè)市場深度調(diào)研及發(fā)展前景與投資研究報告
- 2025年中學(xué)生離隊入團活動實施方案
- 2025綠色建筑檢驗機構(gòu)能力驗證要求
- 玻璃基板制備技術(shù)考核試卷
- 南極磷蝦油與紅曲、輔酶Q10聯(lián)用降低血脂效果研究
- 2025年上海市安全員C3證(專職安全員-綜合類)考試題庫
- 錢大媽加盟合同協(xié)議
- 基本公共衛(wèi)生服務(wù)2025版培訓(xùn)
- 《建筑工程識圖》課件-梁平法施工圖識讀一
評論
0/150
提交評論