




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
-1-本章目標(biāo)理解關(guān)系數(shù)據(jù)庫的概念掌握常用的SQL語句的使用掌握利用ADO對象進(jìn)行數(shù)據(jù)庫應(yīng)用程序編程的方法數(shù)據(jù)庫基礎(chǔ)知識—數(shù)據(jù)庫基本概念數(shù)據(jù)庫是數(shù)據(jù)的集合,常見的關(guān)系型數(shù)據(jù)庫由一個或多個表組成,每一個表中都存儲了一組(或一類對象的)數(shù)據(jù)描述??梢栽诒碇卸x主鍵,主鍵的作用如下:保證實(shí)體的完整性;加快數(shù)據(jù)庫的操作速度;在表中添加新記錄時,數(shù)據(jù)庫系統(tǒng)自動檢查新紀(jì)錄的主鍵值,不允許該值與其他記錄的主鍵值重復(fù)。-2-數(shù)據(jù)庫基礎(chǔ)知識—數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)(簡稱DBMS)是指數(shù)據(jù)庫系統(tǒng)中對數(shù)據(jù)進(jìn)行管理的軟件系統(tǒng),它是數(shù)據(jù)庫系統(tǒng)的核心組成部分。例如Access、Sysbase、Oracle和SQLServer等都是DBMS。DBMS的主要目標(biāo)是使數(shù)據(jù)作為一種可管理的資源來處理,使數(shù)據(jù)易于為各種不同的用戶所共享,并增進(jìn)數(shù)據(jù)的安全性、完整性,同時提供高度的數(shù)據(jù)獨(dú)立性。在DBMS中,游標(biāo)是一個十分重要的概念。從用戶的角度看,游標(biāo)總是與一條SQL語句相關(guān)聯(lián),游標(biāo)由結(jié)果集和結(jié)果集中指向特定記錄的位置組成。-3-數(shù)據(jù)庫基礎(chǔ)知識—結(jié)構(gòu)化查詢語言依據(jù)SQL的執(zhí)行功能,可以將SQL分為以下幾部分:數(shù)據(jù)定義語言(DDL):用于創(chuàng)建、修改或刪除數(shù)據(jù)庫對象,如表、視圖、模式、觸發(fā)器和存儲過程等。相關(guān)的主要SQL關(guān)鍵字包括CREATE、ALTER和DROP。數(shù)據(jù)查詢語言(DQL):用于數(shù)據(jù)檢索查詢。相關(guān)的主要SQL關(guān)鍵字如SELECT。數(shù)據(jù)操縱語言(DML):用于添加、修改或刪除存儲在數(shù)據(jù)庫中的數(shù)據(jù)。相關(guān)的SQL關(guān)鍵字包括INSERT、UPDATE和DELECT。數(shù)據(jù)控制語言(DCL):控制訪問數(shù)據(jù)庫中特定對象的用戶,還可以控制用戶的數(shù)據(jù)庫的訪問類型。相關(guān)的SQL關(guān)鍵字包括GRANT、DENY和REVOKE。其他語言要素:SQL還包括一些其他要素(如事務(wù)控制等)。-4-數(shù)據(jù)庫基礎(chǔ)知識—結(jié)構(gòu)化查詢語言主要的SQL語句:種類語句功能數(shù)據(jù)定義CREATETABLE創(chuàng)建一個數(shù)據(jù)庫表ALTERTABLE修改數(shù)據(jù)庫表結(jié)構(gòu)DROPTABLE從數(shù)據(jù)庫中刪除表數(shù)據(jù)查詢SELECT從數(shù)據(jù)庫中檢索數(shù)據(jù)行和列數(shù)據(jù)操縱INSERT向數(shù)據(jù)庫表中添加新數(shù)據(jù)行UPDATE更新數(shù)據(jù)庫表中的數(shù)據(jù)DELECT從數(shù)據(jù)庫表中刪除數(shù)據(jù)行事務(wù)控制COMMIT結(jié)束當(dāng)前事務(wù)ROLLBACK回滾當(dāng)前事務(wù)SETTRANSACTION定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征-5-數(shù)據(jù)庫基礎(chǔ)知識—結(jié)構(gòu)化查詢語言數(shù)據(jù)庫中常用的數(shù)據(jù)類型:數(shù)據(jù)類型說明Char(Size)固定長度的字符串型,Size指定字符數(shù),一般不能超過255Int(或Interger)32位整數(shù)Real32位浮點(diǎn)數(shù)DATA日期型數(shù)據(jù),使用10個字符保存4位的年、2位的月和2位的日期,例如2011-10-18TIME時間型數(shù)據(jù),時、分、秒,分別是2位數(shù)。TIMESTAMP既包括日期也包括時間BINARY定長二進(jìn)制數(shù)據(jù),最大長度要根據(jù)具體的DBMS的定義VARBINARY可變長二進(jìn)制數(shù)據(jù),最大長度要根據(jù)具體的DBMS的定義-6-數(shù)據(jù)庫基礎(chǔ)知識—數(shù)據(jù)庫訪問技術(shù)為了降低開發(fā)數(shù)據(jù)庫應(yīng)用程序的難度,微軟推出了一些標(biāo)準(zhǔn)的訪問DBMS的技術(shù)。這些技術(shù)包括ODBC、DAO、OLEDB、ADO等。以上幾種技術(shù)中,DAO已經(jīng)很少使用了;ODBC是基于C語言的;ADO比較新,而且支持自動化,所以使用的比較多。微軟已經(jīng)基本停止對ODBC和DAO的繼續(xù)發(fā)展,大力推薦使用ADO-7-ADO數(shù)據(jù)庫編程—ADO技術(shù)ADO中和數(shù)據(jù)庫操作相關(guān)的對象主要有三個核心對象:連接對象(Connection):管理應(yīng)用程序和數(shù)據(jù)庫之間的通信。在數(shù)據(jù)庫應(yīng)用程序里操作數(shù)據(jù)庫都必須通過該對象。該對象代表了與數(shù)據(jù)庫的一個會話,在客戶/服務(wù)器模式下,這個會話相當(dāng)于與服務(wù)器的一次網(wǎng)絡(luò)連接。命令對象(Command):該對象是一個對數(shù)據(jù)庫執(zhí)行命令的定義。可以執(zhí)行一個批量的數(shù)據(jù)操作,例如可以用來查詢數(shù)據(jù)庫并返回一個Recorset對象。記錄集對象(Recordset):如果執(zhí)行的命令是一個查詢并返回存放在表中的結(jié)果集,這些結(jié)果集將保存在一個Recordset對象中。通過Recordset對象可以操縱來自數(shù)據(jù)提供者的數(shù)據(jù),包括修改、更新行、插入和刪除行。-8-ADO數(shù)據(jù)庫編程—ADO技術(shù)ADO編程步驟:導(dǎo)入ADO庫。初始化OLE/COM庫。利用Connection對象連接數(shù)據(jù)庫。利用建立好的連接,通過Connection、Command對象執(zhí)行SQL命令,或利用Recordset對象取得結(jié)果集進(jìn)行查詢和處理。使用完畢后關(guān)閉連接,釋放相應(yīng)對象。-9-ADO數(shù)據(jù)庫編程—ADO技術(shù)_variant_t數(shù)據(jù)類型:在COM庫中經(jīng)常使用到_variant_t類型。該類型是一個繼承自結(jié)構(gòu)體tagVARIANT的類類型,tagVARIANT結(jié)構(gòu)體其實(shí)是一個多種數(shù)據(jù)類型的聯(lián)合。從編程角度看,_tagVARIANT結(jié)構(gòu)體是一種萬能數(shù)據(jù)類型,可以用來存儲各種類型的數(shù)據(jù)成語說明vt該值與VT_NULL相比較,可以判斷變量是否為空bstrVal存儲BSTR型數(shù)據(jù)cVal存儲CHAR型數(shù)據(jù)boolVal存儲布爾型數(shù)據(jù)intVal存儲的是整形數(shù)據(jù)dblVal存儲的是double型數(shù)據(jù)-10-ADO數(shù)據(jù)庫編程—ADO技術(shù)__bstr_t數(shù)據(jù)類型:_bstr_t是一個COM庫中的類,其封裝了BSTR數(shù)據(jù)類型,而BSTR是COM庫中用來表示UNICODE編碼的字符串。//程序員可以直接將字符指針賦值給_bstr_t類型的數(shù)值,例如:_bstr_tsUserName=_T(“123456”);-11-ADO數(shù)據(jù)庫編程—ADO技術(shù)ADO異常處理:操作數(shù)據(jù)庫時,經(jīng)常出現(xiàn)一些意外的錯誤,例如執(zhí)行SQL語句錯誤、數(shù)據(jù)庫連接意外斷開等。COM庫提供了一個異常類型_com_error,其ErrorMessage()成員函數(shù)可以獲得異常信息。通常使用C++的try{}...catch{}塊捕獲此種類型的異常錯誤//典型的異常處理語句如下:try{ ...... //數(shù)據(jù)庫操作}catch(_com_error){ AfxMessageBox(e.ErrorMessage());}-12-ADO數(shù)據(jù)庫編程—導(dǎo)入ADO庫直接用導(dǎo)入符號#import導(dǎo)入ADO庫文件,示例代碼如下:#import"C:\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")而后,一般在應(yīng)用程序類的InitInstance()成員函數(shù)里,初始化OLE/COM庫:BOOLCadoTestApp::InitInstance(){ if(!AfxOleInit()) { AfxMessageBox(_T("初始化OLE失敗!")); returnFALSE; }......}-13-ADO數(shù)據(jù)庫編程—連接數(shù)據(jù)庫1創(chuàng)建連接對象實(shí)例先在類定義的頭文件中聲明_ConectionPtr對象指針作為類的數(shù)據(jù)成員而后在類的成員函數(shù)中,調(diào)用連接對象的CreateInstance()成員函數(shù)創(chuàng)建連接對象實(shí)例//類頭文件protected: _ConnectionPtrm_pConnection;//類實(shí)現(xiàn)文件HRESULThr=m_pConnection.CreateInstance(__uuidof(Connection)); if(!SUCCEEDED(hr)) { AfxMessageBox(_T("創(chuàng)建連接對象實(shí)例失?。?)); }-14-ADO數(shù)據(jù)庫編程—連接數(shù)據(jù)庫2連接數(shù)據(jù)庫調(diào)用其Open()成員函數(shù)連接數(shù)據(jù)庫//連接數(shù)據(jù)庫的示例代碼如下hr=m_pConnection->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0; DataSource=C:\\Employee.mdb"),_T(""),_T(""),adModeUnknown);if(!SUCCEEDED(hr)){ AfxMessageBox(_T("連接到數(shù)據(jù)庫失??!"));}-15-ADO數(shù)據(jù)庫編程—連接數(shù)據(jù)庫3執(zhí)行SQL語句調(diào)用連接對象的Execute()函數(shù)可以執(zhí)行SQL語句,該函數(shù)的原型如下_RecordsetPtrExecute( _bstr_tCommandText,//要執(zhí)行的文本命令,如SQL語句、表名 VARIANT*RecordsAffected,//執(zhí)行命令后的返回值 longOptions);//要執(zhí)行命令的類型,含義見下表常量值說明adCmdText表示執(zhí)行SQL語句adCmdTable表示通過數(shù)據(jù)庫中定義的表名來獲取記錄集adCmdStoreProc表示調(diào)用數(shù)據(jù)中定義的存儲過程adCmdUnknown未知記錄類型-16-ADO數(shù)據(jù)庫編程—執(zhí)行ADO對象命令1創(chuàng)建命令對象實(shí)例首先在類的定義文件中聲明命令對象指針而后,在類的成員函數(shù)中,調(diào)用CreateInstance()成員函數(shù)創(chuàng)建命令對象實(shí)例//類頭文件protected: _CommandPtrm_pCommand;//類實(shí)現(xiàn)文件HRESULThr=m_pCommand.CreateInstance(__uuidof(Command));if(!SUCCEEDED(hr)){ AfxMessageBox(_T("創(chuàng)建命令對象實(shí)例失敗!"));}-17-ADO數(shù)據(jù)庫編程—執(zhí)行ADO對象命令2設(shè)置ActiveConnection屬性將命令對象屬性中的ActiveConnection設(shè)置為已有的連接對象指針m_pCommand->ActiveConnection=m_pConnection;-18-ADO數(shù)據(jù)庫編程—執(zhí)行ADO對象命令3執(zhí)行SQL語句通過連接對象的CommandText屬性指定要執(zhí)行的SQL語句,而后調(diào)用Execute()成員函數(shù)執(zhí)行命令try{ m_pCommand->CommandText=_T("SELECT*FROMBasicInfo"); _RecordsetPtrrs=m_pCommand->Execute(NULL,NULL,adCmdText);}catch(_com_error){ AfxMessageBox(e.ErrorMessage());}-19-ADO數(shù)據(jù)庫編程—Recordset對象1記錄集RecordSet對象封裝了對查詢結(jié)果的操作,通過Recordset對象可以操縱來自數(shù)據(jù)提供者的數(shù)據(jù),包括修改更新行插入刪除行-20-ADO數(shù)據(jù)庫編程—Recordset對象2獲取記錄集對象先聲明記錄集對象指針,而后調(diào)用CreateInstance()成員函數(shù)創(chuàng)建實(shí)例,然后調(diào)用其Open()成員函數(shù)打開記錄集。//下述代碼,演示了創(chuàng)建記錄集對象實(shí)例,并打開記錄集的過程。_RecordsetPtrrs;rs.CreateInstance(__uuidof(Recordset));rs->Open(_T("SELECT*FROMBasicInfo"),m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);-21-ADO數(shù)據(jù)庫編程—Recordset對象3關(guān)于記錄集對象從Open()函數(shù)的功能可以看出,RecordSet對象功能強(qiáng)大:若其第一個參數(shù)傳遞SQL語句,Recordset對象同COmmand對象一樣也可以執(zhí)行SQL數(shù)據(jù)操作;若第二個參數(shù)傳遞連接信息字符串,Recorset對象同Connection對象一樣可以打開數(shù)據(jù)庫。因此,在簡單的數(shù)據(jù)庫應(yīng)用程序可以中可以只用一個Recordset對象,但在實(shí)際的編程中,經(jīng)常用一個Connection對象維護(hù)和數(shù)據(jù)庫的唯一連接,然后用一個或多個Recordset對象執(zhí)行SQL數(shù)據(jù)操作,這樣實(shí)現(xiàn)使程序更易維護(hù)。-22-ADO數(shù)據(jù)庫編程—Recordset對象4獲取記錄集的特性支持并不是所有的驅(qū)動程序和記錄集類型都支持記錄集的所有特性。為了避免應(yīng)用程序出現(xiàn)異常,可以先調(diào)用記錄集對象的Supports()函數(shù),判定記錄集支持什么樣的屬性和方法。//典型用法如下:if(rs->Supports(adMovePrevious)){ rs->MovePrevious();}else{ AfxMessageBox(_T("記錄集不支持向上移動記錄指針!"));}-23-ADO數(shù)據(jù)庫編程—Recordset對象5遍歷記錄函數(shù)功能描述MoveFirst()移動到第一條記錄MoveLast()移動到最后一條記錄MoveNext()移動到下一條記錄MovePrev()移動到前一條記錄-24-ADO數(shù)據(jù)庫編程—Recordset對象訪問記錄中的數(shù)據(jù)//訪問記錄中的數(shù)據(jù)字段可以采用如下方式,其中index是字段的索引值:rs->GetFields()->GetItem(index)->Value;rs->Fileds->Item(index)->Value;//更簡單的方法是:rs->GetCollect(字段名);//典型的獲取字段內(nèi)容的代碼如下:_variant_tvValue;vValue=m_pRecordset->GetCollect(_T("工號"));If(vValue.vt!=VT_NULL)CStringstr=vValue.bstrVal;......-25-ADO數(shù)據(jù)庫編程—Recordset對象編輯記錄,需要經(jīng)過以下三個步驟:移動記錄指針到要編輯的記錄。調(diào)用PutCollect()函數(shù)修改字段內(nèi)容。調(diào)用Update()函數(shù)更新記錄。//典型的編輯記錄的示例代碼如下://假設(shè)已經(jīng)將記錄移動到要修改的位置rs->PutCollect(_T("工號"),_variant_t(_T("012")));rs->PutCollect(_T("職稱"),_variant_t(_T("中級")));rs->Update();-26-ADO數(shù)據(jù)庫編程—Recordset對象添加記錄,需要經(jīng)過以下三個步驟:調(diào)用AddNe
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圍堰施工課題申報書
- 軟件測試申報書課題
- 課題申報書方案構(gòu)建模板
- 合伙企業(yè)人合同范本
- 單位買電合同范本
- 合同范本分包合同
- 課題申報書課題類型
- 特殊學(xué)生教育課題申報書
- 和單位購銷采購合同范本
- 品牌門窗店銷售合同范本
- PDCA提高臥床患者踝泵運(yùn)動的執(zhí)行率
- 蔣詩萌小品《誰殺死了周日》臺詞完整版
- 【海信電器產(chǎn)品成本控制問題及完善措施分析】9600字
- 拼多多企業(yè)戰(zhàn)略分析報告
- 2021版勞動實(shí)踐河北科學(xué)技術(shù)出版社二年級下冊超輕黏土創(chuàng)意多教案
- 梁柱加固施工方案
- 孕婦枕行業(yè)深度研究報告
- 中考復(fù)習(xí)物理力學(xué)部分綜合試題(人教版含答案)
- BCP業(yè)務(wù)連續(xù)性管理手冊
- 2024年湖南鐵路科技職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案解析word版
- 2024年中考英語第一次模擬試卷-(廣州卷)(全解全析)
評論
0/150
提交評論