




已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ADO數(shù)據(jù)庫(kù)編程,第七章,2,回顧,設(shè)計(jì)應(yīng)用程序菜單 為應(yīng)用程序添加快捷鍵 彈出式菜單的設(shè)計(jì) 工具欄編程 狀態(tài)欄編程 樹(shù)控件及列表控件的使用,3,本章目標(biāo),了解MFC下各種訪問(wèn)數(shù)據(jù)庫(kù)的方式 主要掌握ADO主要導(dǎo)出接口 掌握使用ADO進(jìn)行數(shù)據(jù)庫(kù)操作,4,ODBC、DAO和OLE DB,ODBC(開(kāi)放數(shù)據(jù)庫(kù)接口 )是一種標(biāo)準(zhǔn)的基于SQL的接口,它提供了應(yīng)用程序與數(shù)據(jù)庫(kù)之間的接口,使得任何一個(gè)數(shù)據(jù)庫(kù)都可以通過(guò)ODBC驅(qū)動(dòng)程序與指定的DBMS相連 DAO使用Jet數(shù)據(jù)庫(kù)引擎形成一系列的數(shù)據(jù)訪問(wèn)對(duì)象:數(shù)據(jù)庫(kù)對(duì)象、表和查詢對(duì)象、記錄集對(duì)象等??梢源蜷_(kāi)一個(gè)Access數(shù)據(jù)庫(kù)文件(MDB文件),也可直接打開(kāi)一個(gè)ODBC數(shù)據(jù)源以及使用Jet引擎打開(kāi)一個(gè)ISAM(被索引的順序訪問(wèn)方法)類型的數(shù)據(jù)源(dBASE、FoxPro、Paradox、Excel或文本文件)。 OLE DB試圖提供一種統(tǒng)一的數(shù)據(jù)訪問(wèn)接口,并能處理除了標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)之外,還能處理包括郵件數(shù)據(jù)、Web上的文本或圖形、目錄服務(wù)(Directory Services)以及主機(jī)系統(tǒng)中的IMS和VSAM數(shù)據(jù)。OLE DB提供一個(gè)數(shù)據(jù)庫(kù)編程COM(組件對(duì)象模型)接口,使得數(shù)據(jù)的使用者(應(yīng)用程序)可以使用同樣的方法訪問(wèn)各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲(chǔ)地點(diǎn)、格式或類型。這個(gè)COM接口與ODBC相比,其健壯性和靈活性要高得多。,5,MFC ODBC技術(shù),MFC的ODBC類對(duì)較復(fù)雜的ODBC API進(jìn)行了封裝,提供了簡(jiǎn)化的調(diào)用接口 CDatabase類:主要功能是建立與數(shù)據(jù)源的連接,可以在整個(gè)應(yīng)用程序中共享這些信息。 CRecordset類:代表從數(shù)據(jù)源選擇的一組記錄。CRecordset類允許指定要運(yùn)行的SQL查詢,它將運(yùn)行查詢并維護(hù)自數(shù)據(jù)庫(kù)返回的記錄集。可以修改和更新記錄,還可增加、刪除記錄,并將所做的變動(dòng)反饋到該數(shù)據(jù)庫(kù)中。 CRecordView類:提供了一個(gè)表單視圖與某個(gè)記錄集直接相連,利用對(duì)話框數(shù)據(jù)交換(DDX)機(jī)制在記錄集與表單視圖的控件之間傳輸數(shù)據(jù)。 CFieldExchange類:支持記錄字段數(shù)據(jù)交換(DFX),即記錄集字段數(shù)據(jù)成員與相應(yīng)的數(shù)據(jù)庫(kù)的標(biāo)的字段之間的數(shù)據(jù)交換。 CDBException類:代表ODBC類產(chǎn)生的異常。,6,ADO,ADO是目前在Windows環(huán)境中比較流行的客戶端數(shù)據(jù)庫(kù)編程技術(shù)。它是Microsoft為最新和最強(qiáng)大的數(shù)據(jù)訪問(wèn)范例OLE DB而設(shè)計(jì)的,是一個(gè)便于使用的應(yīng)用程序?qū)咏涌?。ADO使用戶應(yīng)用程序能夠通過(guò)“OLE DB提供者”訪問(wèn)和操作數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)。由于它兼具有強(qiáng)大的數(shù)據(jù)處理功能(處理各種不同類型的數(shù)據(jù)源、分布式的數(shù)據(jù)處理等等)和極其簡(jiǎn)單、易用的編程接口,因而得到了廣泛的應(yīng)用。 ADO技術(shù)基于COM(Component Object Model,組件對(duì)象模型),具有COM組件的許多優(yōu)點(diǎn),可以用來(lái)構(gòu)造可復(fù)用應(yīng)用框架,被多種語(yǔ)言支持,能夠訪問(wèn)包括關(guān)系數(shù)據(jù)庫(kù)、非關(guān)系數(shù)據(jù)庫(kù)及所有的文件系統(tǒng)。另外,ADO還支持各種B/S與基于Web的應(yīng)用程序,具有遠(yuǎn)程數(shù)據(jù)服務(wù)RDS(Remote Data Service)的特性,是遠(yuǎn)程數(shù)據(jù)存取的發(fā)展方向。,7,ADO對(duì)象模型,連接對(duì)象Connection 通過(guò)連接可以從應(yīng)用程序中訪問(wèn)數(shù)據(jù)源。連接時(shí)必須指定要連接的數(shù)據(jù)源以及連接所使用的用戶名和用戶口令。 命令對(duì)象Command 可以通過(guò)已建立的連接發(fā)出命令,從而對(duì)數(shù)據(jù)源進(jìn)行指定操作。一般情況下,命令可以在數(shù)據(jù)源中添加、修改或刪除數(shù)據(jù),也可以檢索數(shù)據(jù)。 參數(shù)對(duì)象Parameter 在執(zhí)行命令時(shí)可以指定參數(shù),參數(shù)可以在命令發(fā)布之前進(jìn)行更改。例如,可以重復(fù)發(fā)出相同的數(shù)據(jù)檢索命令,但是每一次指定的檢索條件不同。 記錄集對(duì)象Recordset 查詢命令可以將查詢結(jié)果儲(chǔ)存在本地,這些數(shù)據(jù)以行為單位,返回?cái)?shù)據(jù)的集合被稱為記錄集 字段對(duì)象Field 一個(gè)記錄集包含一個(gè)或多個(gè)字段。每一字段(列)都包含名稱、數(shù)據(jù)類型和值屬性。 錯(cuò)誤對(duì)象Error 錯(cuò)誤可隨時(shí)在程序中發(fā)生,通常是由于無(wú)法建立連接、執(zhí)行命令或?qū)δ承顟B(tài)的對(duì)象進(jìn)行操作。 屬性對(duì)象Property,8,ADO的4種類型的集合,Connection對(duì)象具有Errors集合,包含為響應(yīng)與數(shù)據(jù)源有關(guān)的單一錯(cuò)誤而創(chuàng)建的所有Error對(duì)象。 Command對(duì)象具有Parameters集合,包含應(yīng)用于Command對(duì)象的所有Parameter對(duì)象。 Recordset對(duì)象具有Fields集合,包含Recordset對(duì)象中所有列的Field對(duì)象。 Connection對(duì)象、Command對(duì)象、Recordset對(duì)象和Field對(duì)象都具有Properties集合,它包含各個(gè)對(duì)象的Property對(duì)象。,9,使用ADO創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用程序,在MFC應(yīng)用程序中使用ADO數(shù)據(jù)庫(kù)的一般過(guò)程是: 添加對(duì)ADO的支持; 創(chuàng)建一個(gè)數(shù)據(jù)源連接; 對(duì)數(shù)據(jù)源中的數(shù)據(jù)庫(kù)進(jìn)行操作; 關(guān)閉數(shù)據(jù)源。,10,引入ADO庫(kù),在Visual C+中,使用ADO開(kāi)發(fā)數(shù)據(jù)庫(kù)之前需要引入ADO庫(kù)??梢栽赟tdAfx.h文件末尾處引入ADO庫(kù)文件 #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是編譯器將此命令中所指定的動(dòng)態(tài)鏈接庫(kù)文件引入到程序中,并從動(dòng)態(tài)鏈接庫(kù)文件中抽取出其中的對(duì)象和類的信息。 icrsint.h文件包含了Visual C+擴(kuò)展的一些預(yù)處理指令、宏等的定義,用于與數(shù)據(jù)庫(kù)數(shù)據(jù)綁定。,11,連接到數(shù)據(jù)庫(kù)2-1,在能夠使用ADO對(duì)象之前,必須為應(yīng)用程序初始化COM環(huán)境 BOOL CADOApp:InitInstance() :CoInitialize(NULL); AfxEnableControlContainer(); 建立數(shù)據(jù)庫(kù)的連接需要使用連接對(duì)象Connection。首先定義一個(gè)_ConnectionPtr類型指針,然后調(diào)用CreateInstance方法實(shí)例化,例如: _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(_uuidof(Connection);,12,連接到數(shù)據(jù)庫(kù)2-2,ADO使用Connection對(duì)象來(lái)建立與數(shù)據(jù)庫(kù)服務(wù)器的連接,它相當(dāng)于MFC中的CDatabase類。和CDatabase類一樣,調(diào)用Connection對(duì)象的Open即可建立與服務(wù)器的連接 函數(shù)原型:HRESULT Connection:Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) 參數(shù):ConnectionString為連接字串,UserID是用戶名,Password是登錄密碼,Options是選項(xiàng),通常用于設(shè)置同步和異步等方式。_bstr_t是一個(gè)COM類,用于字符串BSTR(用于Automation的寬字符)操作。 不同的數(shù)據(jù),其連接字串有所不同:,13,Connection對(duì)象,Connection對(duì)象除了建立與數(shù)據(jù)庫(kù)服務(wù)器的連接外,還可以通過(guò)OpenSchema來(lái)獲取數(shù)據(jù)源的自有信息,如:數(shù)據(jù)表信息、表字段信息以及所支持的數(shù)據(jù)類型等。 OpenSchema方法中的adSchemaColumns是一個(gè)預(yù)定義的枚舉常量,用來(lái)獲取與“列”(字段)相關(guān)的信息記錄集。該信息記錄集的主要字段名有“TABLE_NAME”、“COLUMN_NAME”;類似的,若在OpenSchema方法中指定adSchemaTables枚舉常量,則返回的記錄集的字段名主要有“TABLE_NAME”、“TABLE_TYPE”。,14,Recordset對(duì)象,上述的OpenSchema函數(shù)返回的是記錄集指針_RecordsetPtr,對(duì)應(yīng)類型Recordset對(duì)象 _RecordsetPtr指針與數(shù)據(jù)庫(kù)是的游標(biāo)類似,可以遍歷一到多個(gè)記錄集,常用指針指向操作有指向下一條記錄MoveNext()、指向上一條記錄MovePrevious ()、指向第一條記錄MoveFirst()、指向最后一條記錄MoveLast()、指向下一個(gè)記錄集NextRecordset() 訪問(wèn)對(duì)應(yīng)字段記錄值用GetCollect (“字段名“)或 Fields-GetItem(“字段名“)-GetValue(),15,例子3-1,(1) 用MFC AppWizard創(chuàng)建一個(gè)默認(rèn)的單文檔應(yīng)用程序Ex_ADO,但在向?qū)У牡?步將CEx_ADOView的基類由默認(rèn)的CView選擇為CListView類,以便更好地顯示和操作數(shù)據(jù)表中的記錄。 (2) 在CEx_ADOView:PreCreateWindow函數(shù)添加下列代碼,用來(lái)設(shè)置列表視圖內(nèi)嵌列表控件的風(fēng)格: BOOL CEx_ADOView:PreCreateWindow(CREATESTRUCT /_ConnectionPtr、_RecordsetPtr和_CommandPtr分別是ADO對(duì)象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; / 允許連接超時(shí)時(shí)間,單位為秒 HRESULT hr = m_pConnection-Open(“,“,“,0); if (hr != S_OK) MessageBox(“無(wú)法連接指定的數(shù)據(jù)庫(kù)!“); / 獲取數(shù)據(jù)表名和字段名 _RecordsetPtr pRstSchema = NULL; / 定義一個(gè)記錄集指針 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 濟(jì)寧黨建面試真題及答案
- 初中物理-力學(xué)問(wèn)題課件
- 《機(jī)械設(shè)計(jì)課件-課堂練習(xí)》
- 《三維和三維系統(tǒng)》課件
- 《迪拜建筑藝術(shù)獎(jiǎng)》課件
- 內(nèi)蒙古中考英語(yǔ)語(yǔ)法單選題100道及答案
- 鍛造領(lǐng)導(dǎo)力訓(xùn)練課件
- 國(guó)際旅游業(yè)市場(chǎng)更新
- 《頭痛癥狀解析》課件
- 數(shù)字集成播控系統(tǒng)課件:現(xiàn)代廣播電視發(fā)送技術(shù)的創(chuàng)新應(yīng)用
- 導(dǎo)地線壓接培訓(xùn)課件
- 酒店工傷預(yù)防知識(shí)培訓(xùn)課件
- 計(jì)算機(jī)網(wǎng)絡(luò)故障的診斷與解決方法
- 數(shù)字信號(hào)處理名??佳姓骖}詳解
- 職業(yè)生涯規(guī)劃家庭教育課
- 月季整枝的修剪對(duì)策
- 急診科病例接診流程
- 《血壓測(cè)量》課件
- 沉降觀測(cè)匯總表及曲線圖
- 2023阿里淘寶村報(bào)告
- 小紅帽的故事原文完整版文字
評(píng)論
0/150
提交評(píng)論