




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數據庫應用結構,數據庫系統(tǒng)的應用結構分類: 單用戶數據庫應用結構: 運行于PC機稱桌面DBMS 主要產品 不完備方面:,Microsoft Access、Paradox、Fox系列和DBase系列,數據的一致性維護、完整性檢查及安全性管理方面有許多欠缺,集中式結構 文件服務器結構 客戶/服務器式結構 互聯(lián)網應用結構,多用戶數據庫應用結構,集中式結構 主機/終端結構是大型主機系統(tǒng)使用的結構,這種結構是將操作系統(tǒng)、應用程序、DBMS、數據庫等數據和資源均放在主機上,以一臺主機為核心,連接多個終端,終端只是作為主機的一種I/O設備,所有的應用處理均由主機承擔,多用戶數據庫應用系統(tǒng)分類:,集中式數據庫
2、應用結構,文件服務器結構,數據庫 網絡文件服 務器,客戶端,文件請求,文件,工作站1 應用程序,Microsoft Access、FoxPro是流行的支持文件服務器結構的數據庫管理系統(tǒng),客戶服務器: 通過對服務功能的分布實現分工服務,其中:,多用戶數據庫應用系統(tǒng)分類:,客戶/服務器式數據庫應用結構,數據庫 服務器,客戶端,請求,結果,工作站1 應用程序,客戶機負責管理用戶界面,接收用戶數據,處理應用邏輯,生成數據庫服務請求。然后將這些請求發(fā)送給服務器,接收服務器返回的結果,最后再將這些結果按一定的格式返回給用戶; 服務器接收客戶機的請求,處理這些請求,返回處理結果(包括執(zhí)行狀態(tài):成功、失敗以及
3、數據庫訪問的結果數據)給客戶機,同時,服務器還要進行數據庫完整性檢查,維護數據庫附加的數據,支持并發(fā)控制等 主流的產品:Microsoft公司的SQL Server、SYBASE公司的Sybase、ORACLE公司的Oracle、INFORMIX公司的Informix和IBM公司的DB2,數據庫服務器,客戶端,請求,頁面,瀏覽器,數據庫,請求,結果,互聯(lián)網應用結構,應用程序,Web服務器,數據庫有Microsoft SQL Server 、 Orcale、Sybase、DB2和Informix都可作為服務器端的DBMS,一些桌面數據庫管理系統(tǒng)如Access等也可作為這種結構的DBMS。 Web
4、服務器有 Microsoft的IIS(Internet Information Server)、 PWS(Personal Web Server),Visual c+中的數據訪問,ODBC開放數據庫連接 DAO(Data Access Objects )數據訪問對象 OLE DB技術 ActiveX Data Object(ADO),1 DAO(Data Access Objects )數據訪問對象 DAO使用Microsoft Jet提供的數據庫訪問對象集直接訪問DBMS,速度比ODBC要快。 Visual C+6.0不支持Acess97以后的mdb數據庫,所以Access2000生成的數據
5、庫需要轉換為Acess97格式,微軟公司20世紀90年代初開發(fā)的一套開放數據庫系統(tǒng)應用程序接口規(guī)范,提供了統(tǒng)一的數據庫應用編程接口(API函數) ODBC的工作依賴于數據庫制造商提供的驅動程序 使用ODBC API時,Windows的ODBC管理程序把數據庫訪問請求傳遞給正確的驅動程序,驅動程序使用SQL語句指示DBMS完成數據庫訪問工作 使用ODBC時,必須把數據庫注冊到ODBC驅動程序管理器,可通過定義一個DSN(數據源名稱)來完成,2.開放數據庫互連(ODBCOpen DataBase Connectivity),ODBC的體系結構示意圖(4部分),ODBC管理器 在Windows200
6、0或Windows XP下,通過【控制面板】-【管理工具】-【數據源ODBC】打開ODBC管理器 使用ODBC管理器設置ODBC數據源: 可以定義3種數據源: 用戶DSN:只有當前用戶可見,而且只能用于當前計算機上 系統(tǒng)DSN:對當前計算機上的所有用戶都是可見的 文件DSN:介于用戶DSN和系統(tǒng)DSN之間 設置Acess數據源舉例,3.OLE DB OLE DB 是一種高性能的、基于 COM(組件對象模型) 的數據庫技術 Microsoft公司20世紀90年代中期提出的。 OLE DB不僅為關系數據庫設計的,而且也是為其它類型的數據庫設計的。 OLE DB組件由數據提供者、數據消費者和服務組件
7、組成;數據提供者提供數據,數據消費者使用數據,服務組件處理和傳送數據。 OLE DB提高了數據庫的訪問速度,4. ADO技術介紹,ADO簡介 ADO技術特點 ADO對象模型 開發(fā)ADO應用程序的方法,ADO簡介,ADO是Microsoft的數據庫應用程序開發(fā)的新接口,是建立在OLE DB之上的高級數據庫訪問技術。避免了開發(fā)人員直接使用 OLE DB底層接口的麻煩。 ADO技術基于COM(Component Object Model),可以用來構造可復用應用框架,被多種語言支持,能夠訪問關系數據庫、非關系數據庫以及所有的文件系統(tǒng)。 另外,ADO還支持各種客戶/服務器模式與基于Web的數據操作。,
8、ADO技術特點,易于使用 高速訪問數據源 可以訪問不同的數據源 可以用于Microsoft ActiveX頁 程序占用的內存少,ADO對象模型,連接對象Connection 命令對象Command 記錄集對象Recordset 域對象Field 參數對象Parameter 屬性對象Property 錯誤對象Error 錯誤集合 Errors 參數集合 Parameters 域集合 Fields 屬性集合 Properties,ADO對象模型提供了7種對象、4種集合。分別為:,連接對象Connection 常用屬性: ConnectionString:包含用于建立鏈接的信息。 Connectio
9、nTimeOut:設置連接的最長時間,缺省值為15秒 Mode:訪問權限設置 Provider:設置連接提供者的名稱 主要函數: Open:打開到數據源的連接 Execute: 執(zhí)行查詢、其它SQL語句、存儲過程等 Close:關閉連接,命令對象Command 常用屬性: 1)ActiveConnection:指明屬于哪一個Connection對象。 2)CommandText:設置命令內容,如SQL語句等 3)CommandTimeout :確定執(zhí)行命令最長的等待時間 4)CommandType:指明命令類型, 可以是表格名adCmdTable、 SQL語句等. 主要函數: Execute:
10、 執(zhí)行在CommandText中指定的查詢、SQL語句或存儲過程等,記錄集對象Recordset 主要函數: Open:打開一個記錄集 Close:關閉記錄集 MoveFirst:移動到記錄集的第一條 MoveLast:移動到記錄集的最后一條 MoveNext :移動到記錄集中當前記錄的后一條 MovePrevious :移動到記錄集中當前記錄的前一條 Move:移動到記錄集中指定位置 AddNew :添加一個空記錄 Delete:刪除當前記錄 Update:將對記錄集的改動保存到數據源中,常用屬性: (1) ActiveConnection:指明屬于哪一個Connection對。 (2)EO
11、F:EOF=TRUE指當前位置位于記錄集中最后一條記錄之后 (3)BOF:BOF=TRUE指當前位置位于記錄集中第一條記錄之前 (4)AbsolutePosition:某條記錄在記錄集中的絕對位置 (5)RecordCount:記錄集中包含的記錄總數 (6)CursorType:指明記錄集的游標類型。有動態(tài)型、靜態(tài)型、僅向前型和鍵型,對應的參數分別為adOpenDynamic、adOpenStatic、adOpenForwardOnly和adOpenKeyset. 動態(tài)型游標允許用戶看到其它用戶對記錄的增加、修改和刪除; 靜態(tài)型游標是記錄集的拷貝,用戶看不到其他用戶對記錄集的改變操作; 僅向前
12、型游標等同于靜態(tài)型游標,不過只能在記錄集中向前移動; 鍵型游標同動態(tài)型游標相似,只不過它防止用戶看到其它用戶添加的記錄,也不允許對其他用戶刪除的記錄進行訪問。,域對象Field:代表字段(列) 常用屬性: Name:返回字段名 Value:設置字段中的數據 Type:返回字段的數據類型 域集合 Fields Fields包含Recordset對象的所有Field對象。每個Field對象對應記錄集中的一列。 常用函數: Append:添加新的Field對象到集合中 Delete:從集合中刪除Field對象 Refresh:更新集合中的Field對象 Item:返回集合中的Field對象 常用屬性
13、: Count:集合中Field對象總數,開發(fā)ADO應用程序的方法,使用ADO Data控件 簡單,用戶只需寫相對較少的代碼,甚至不寫一行代碼,可以實現對數據庫的訪問。其缺點是效率比較低,用戶對程序的控制比較弱,不能充分發(fā)揮ADO的強大功能; 直接使用ADO對象 這種方法可以非常靈活地控制程序的細節(jié),而且效率、性能很高,可以充分發(fā)揮ADO的特性。,11.4.1 數據庫訪問控件 一.ADO Data控件 可以用ADO Data控件快速創(chuàng)建一個到數據庫的連接; ADO Data控件使用Recordset對象提供對存儲在數據庫中數據的訪問,并允許從一個記錄移動到另一個記錄 ADO Data控件可以執(zhí)
14、行大部分數據庫訪問操作,但不能顯示數據庫中數據的內容,需要與數據覺察控件結合使用,創(chuàng)建一個基于對話框的工程,工程名為ADOData 將ADO Data控件添加到工程: Project/add to project/components and controls,打開components and controls Gallery對話框:,例1: ADO Data控件的使用,雙擊”registered ActiveX Controls”,可以看到已注冊的ActiveX控件:,雙擊ADO Data控件后:,單擊確定按鈕后彈出confirm classes窗口:,單擊OK后,系統(tǒng)自動在工程中添加個類
15、關閉窗口后,在工具欄中新増ADO Data控件按鈕:,ADO Data控件的常用屬性 (1)ConnectionString 用于建立鏈接??梢詾樵搶傩再x予一個包含建立聯(lián)接信息的文件,稱為數據鏈接文件(后綴為UDL),也可以直接賦予鏈接字符串,或使用ODBC鏈接。 (2)ConnectionTimeOut屬性 設置連接的最長時間 (3)RecordSource 設置一個數據記錄源,可以是表、視圖或SELECT語句等 (4)UserName和Password屬性 用于對有密碼保護的數據庫的訪問。如果使用鏈接字符串,可以在鏈接字符串中指明這兩個屬性的值。 BOF和 EOF MaxRecords 返
16、回Recordset對象中記錄的數量,將ADO Data控件添加到對話框中,右鍵單擊ADO Data控件,打開控件屬性窗口,如圖:,單擊“通用”選項卡,設置連接屬性,如圖:,選擇“使用連接字符串”,單擊“生成”按鈕后:,確定,單擊“記錄源”選項卡:,DataGrid控件 添加到工程: Microsoft DataGrid Control,Version 6.0(OLE DB),二、數據覺察控件,將DataGrid控件添加到對話框:,打開控件屬性窗口,如圖:,DataSource選擇IDC_ADODC1; 設置Caption; 運行工程:,該系統(tǒng)的主要功能包括:在DataGrid表格中顯示學生的
17、主要信息;可以添加、修改、刪除學生數據,11.4.2 使用ADO對象開發(fā)數據庫應用程序,初始化OLE/COM庫環(huán)境 引入ADO庫文件 用connection對象連接數據庫 利用建立好的連接,通過connection、Command對象執(zhí)行SQL命令,或利用Recordset對象取得結果記錄集 記錄集的遍歷、更新 斷開連接,結束,ADO中的智能指針,_ConnectionPtr :通過該指針操作Connection對象 _CommandPtr :通過該指針操作Command對象 _RecordsetPtr :通過該指針操作Recordset對象,使用ADO對象時沒有相關的MFC類,在使用Conn
18、ection對象、Command對象、Recordset對象這3個對象的時候,需要定義與之對應的3個智能指針,分別為,#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF),在“stdafx.h”中引入ADO庫,初始化OLE/COM庫環(huán)境,在能夠使用ADO對象之前,必須為應用程序初始化COM環(huán)境。代碼如下: : CoInitialize(NULL); 當完成所有的ADO活動時,還必須通過調用函數CoUnitialize關閉COM環(huán)境,代碼如下: :CoUnitialize
19、(); 這個函數可清除COM環(huán)境,并準備關閉應用程序。 還可用:AfxOleInit(),該函數可以自動實現初始化COM環(huán)境和結束時關閉COM的操作,創(chuàng)建ADO與數據源的連接,當初始化COM環(huán)境后,就可以創(chuàng)建與數據庫的連接。首先定義一個_ConnectionPtr類型指針,然后調用CreateInstance方法實例化: _ConnectionPtr m_pConnection; m_pConnection. CreateInstance(_uuidof(Connection); 或者采用另一種CreateInstance的重載函數: m_pConnection. CreateInstance
20、(“ADODB.Connection”);,之后,調用Connection對象的Open方法創(chuàng)建數據庫的連接 其定義如下: HRESULT Connection15:Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password,long Options) 參數: ConnectionString:可選,字符串,包含了連接信息 UserID:可選,字符串,用戶名 Password:可選,字符串,密碼 Options:可選,ConnectOptionEnum值,其值如下所示: adModeUnknown:默認,表示當前的許可權未設置
21、 adModeRead:只讀 adModeWrite:只寫 adModeReadWrite:可以讀寫 .,AfxOleInit(); m_pConnection. CreateInstance(_uuidof(Connection); try m_pConnection-Open(“Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Demo.mdb” , “” , “”, adModeUnknown); catch(_com_error e) /處理異常 AfxMessageBox(e.ErrorMessage(); ,其它常用的連接方式: 通過DSN
22、數據源對支持ODBC的數據庫進行連接: m_pConnection-Open(“ Data Source=Demo;UID=sa;PWD=;” , “” , “”, adModeUnknown); 不通過DSN對SQL SERVER數據庫的鏈接: m_pConnection-Open(“ driver=SQL Server;Server=127.0.0.1;DATABASE=Demo;UID=sa;PWD=” , “” , “”, adModeUnknown); 使用UDL文件鏈接: m_pConnection-Open(“File Name=cmydata.udl” , “” , “”, N
23、ULL); 新建】-【Microsoft數據連接】 新建一個文本文件,再將后綴改為”.udl”, 雙擊udl文件,可視化地完成數據連接,獲得記錄集,_RecordsetPtr m_pRecordset; /定義記錄集指針 m_pRecordset.CreateInstance(_uuidof(Recordset); /實例化 打開記錄集,打開記錄集方法: 用Connection對象的Execute方法執(zhí)行SQL命令 用Command對象執(zhí)行SQL命令 用Recordset對象的Open函數打開記錄集 HRESULT Recordset 15:Open(const_variant_t BSTR
24、bstrSQL=strSql.AllocSysString(); m_pRecordset-Open(“select * from STUDENT”, theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); /打開記錄集 Catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); ,遍歷記錄集,MoveFirst() MoveLast() MoveNext() MovePrevious() Try while(!m_pRecordset
25、-adoEOF) m_pRecordset- MoveNext() ; Catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); ,訪問記錄集中的數據,GetCollect () GetItem(),_ Variant_t theVal; /從ADO記錄集得到的數據都是Variant型 CString strName; theVal=m_pRecordset-GetCollect(“NAME”); if(theVal.vt!=VT_NULL) strName=(LPCSTR)_bstr_t(theValue); theVal=m_pRecords
26、et-Fields-GetItem(“AGE”)-Value(); if(theVal.vt!=VT_NULL) nAge=theVal.iVal;,添加記錄,使用記錄集對象的AddNew方法,CString m_Name= “王晶晶” ; long m_Age=30; m_pRecordset-AddNew( ); m_pRecordset-PutCollect(“NAME”,_ Variant_t(m_Name); m_pRecordset-PutCollect(“AGE”, m_Age ); m_pRecordset-Update( );,修改記錄,CString m_Name= “王晶
27、晶” ; long m_Age=30; m_pRecordset-PutCollect(“NAME”,_ Variant_t(m_Name); m_pRecordset-PutCollect(“AGE”, m_Age ); m_pRecordset-Update( );,查詢記錄,CString m_Name= “王晶晶” ; CString m_class=“123”; CString strSql; strSql.Format(“SELECT *FROM student WHERE Name=%s AND Class=%s”, m_Name, m_class); m_pRecset-Ope
28、n(strSql.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);,使用ADO對象開發(fā)數據庫應用程序,在文件Stdfx.h文件中增加引入ADO庫的代碼 #import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF),步驟一 引入ADO庫,二、初始化COM環(huán)境,創(chuàng)建連接對象,在應用程序類所在的代碼區(qū)(*App.cpp)最前面定義
29、全局變量 _ConnectionPtr m_pConnection; 并在”*App.h”中加入: extern _ConnectionPtr m_pConnection; BOOL CADObApp:InitInstance() AfxOleInit( ); m_pConnection.CreateInstance(ADODB.Connection); m_pConnection- Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=studentDB.mdb,adModeUnknown); . ,三、打開記錄集(初始化對話框 ),在對話框類加
30、入成員變量: protected: _RecordsetPtr m_pRecordset; 用ClassWizard給窗口中每個編輯框添加成員變量,本例添加的有: m_stuid, m_name,m_age, m_sex, m_subject 在對話框類的初始化函數中加入以下代碼: m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset-Open(SELECT * FROM STUDENT, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic,adCm
31、dText); /顯示記錄到界面上 DispRecord();,顯示記錄函數,void CADODlg:DispRecord() _variant_t theValue; /獲取學號的值 if(!m_pRecordset-adoEOF) theValue=m_pRecordset-GetCollect(stuID); if(theValue.vt!=VT_NULL) m_stuid=(char*)_bstr_t(theValue); theValue=m_pRecordset-GetCollect(name); /獲取學生姓名 if(theValue.vt!=VT_NULL) m_name=(
32、char *)_bstr_t(theValue); theValue=m_pRecordset-GetCollect(age); /獲取學生年齡 if(theValue.vt!=VT_NULL) m_age=theValue.iVal; theValue=m_pRecordset-GetCollect(sex); /獲取學生性別 if(theValue.vt!=VT_NULL) m_sex=(char *)_bstr_t(theValue); theValue=m_pRecordset-GetCollect(subject); /獲取學生專業(yè) if(theValue.vt!=VT_NULL)
33、m_subject=(char *)_bstr_t(theValue); UpdateData(FALSE);,瀏覽記錄,void CADODlg:OnNextButton() /后一條 / TODO: Add your control notification handler code here m_pRecordset-MoveNext(); if(m_pRecordset-adoEOF) m_pRecordset-MoveLast(); DispRecord(); void CADObDlg:OnPreButton() /前一條 / TODO: Add your control notification handler code here m_pRecordset-MovePrevious(); if(m_pRecordset-adoBOF) m_pRecordset-MoveFirst(); DispRecord(); ,添加記錄,void CADObDlg:OnAddButton() / TODO: Add your control notification handler code here RefreshData(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年汽車美容師考試技能復盤試題及答案
- 商業(yè)廣告合同范本
- 2024年寵物營養(yǎng)學的重要理論試題及答案
- 食品質量檢驗的操作規(guī)范試題及答案
- 2024年二手車市場分析試題及答案
- 2024年汽車維修工考試難點突破技巧試題及答案
- 江蘇警校面試題目及答案
- 2024年食品質檢員考試的思維導圖運用試題及答案
- 小學一年級如何挖掘孩子的語文潛能試題及答案
- 統(tǒng)計學策略分析能力試題及答案
- 權責發(fā)生制課件ppt
- 上海市徐匯區(qū)2022屆九年級中考二?;瘜W試卷+答案
- 氣化爐的類型
- GB/T 39167-2020電阻點焊及凸焊接頭的拉伸剪切試驗方法
- GB 24155-2009電動摩托車和電動輕便摩托車安全要求
- 人教版七年級下冊數學各單元基礎知識填空+專項復習題
- 紀委書記政治畫像
- 沉井施工難點和解決方案
- 計算流體力學完整課件
- 申論答題紙(A4完美打印版)
- 生物武器傷害及其防護課件
評論
0/150
提交評論