C++課程設計(論文)封裝Ado訪問數(shù)據(jù)庫方法的類_第1頁
C++課程設計(論文)封裝Ado訪問數(shù)據(jù)庫方法的類_第2頁
C++課程設計(論文)封裝Ado訪問數(shù)據(jù)庫方法的類_第3頁
C++課程設計(論文)封裝Ado訪問數(shù)據(jù)庫方法的類_第4頁
C++課程設計(論文)封裝Ado訪問數(shù)據(jù)庫方法的類_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、重慶科技學院visual c+論文院(系):電氣與信息工程學院 班 級: 計科應 08 學生姓名: 學 號: 論文題目:封裝ado訪問數(shù)據(jù)庫方法的類 _完成日期: 2011 年 5月25 日 指導教師評語: _ 成績(五級記分制):_ _ 教師簽名:_封裝ado訪問數(shù)據(jù)庫方法的類摘要:vc+提供了多種訪問數(shù)據(jù)庫的接口,ado是目前在windows環(huán)境中比較流行的客戶端數(shù)據(jù)庫訪問技術。使用封裝方法和源程序實現(xiàn)vc+下嘗試ado訪問數(shù)據(jù)庫類,使其更方便地使用現(xiàn)有的vc的數(shù)據(jù)類型,簡化應用程序書寫的邏輯,增加程序的可讀性。在程序中通過ado的connection和recordset對象可以建立與數(shù)據(jù)

2、庫的連接,并讀寫數(shù)據(jù)庫中的數(shù)據(jù)。關鍵詞:vc+ ado 數(shù)據(jù)庫i1、ado概述 ado是microsoft為最新和最強大的數(shù)據(jù)訪問范例ole db而設計的,是一個便于使用的應用程序接口。ado 使您能夠編寫應用程序以通過 ole.db 提供者訪問和操作數(shù)據(jù)庫服務器中的數(shù)據(jù)。ado 最主要的優(yōu)點是易于使用、速度快、內存支出少和磁盤遺跡小。ado 在關鍵的應用方案中使用最少的網(wǎng)絡流量,并且在前端 和數(shù)據(jù)源之間使用最少的層數(shù),所有這些都是為了提供輕量、高性 能的接口。ole db是一組”組件對象模型”(com) 接口,是新的數(shù)據(jù)庫 低層接口,它封裝了odbc的功能,并以統(tǒng)一的方式訪問存儲 在不同信息

3、源中的數(shù)據(jù)。ole db是microsoft uda(universal data access)策略的技術基礎。ole db 為任何數(shù)據(jù)源提供了高 性能的訪問,這些數(shù)據(jù)源包括關系和非關系數(shù)據(jù)庫、電子郵件 和文件系統(tǒng)、文本和圖形、自定義業(yè)務對象等等。也就是說ole db 并不局限于 isam、jet 甚至關系數(shù)據(jù)源,它能夠處理 任何類型的數(shù)據(jù),而不考慮它們的格式和存儲方法。在實際應用中,這種多樣性意味著可以訪問駐留在 excel 電子數(shù)據(jù)表、 文本文件、電子郵件/目錄服務甚至郵件服務器,諸如 microsoft exchange 中的數(shù)據(jù)。但是,ole db 應用程序編程接口的目的是為各種應用

4、程 序提供最佳的功能,它并不符合簡單化的要求。您需要的 api 應該是一座連接應用程序和 ole db 的橋梁,這就是 activex data objects (ado)。102、ado對象與編程環(huán)境2.1 ado對象ado數(shù)據(jù)庫接口是基于對象的集合,ado對象包括connection對象、command對象、recordset對象、field對象、parameter對象、property對象和error對象等,其中connection、command和recordset三個對象是主體對象,它們可以被獨立創(chuàng)建和釋放。connection對象用來建立和維護與數(shù)據(jù)源的連接,對數(shù)據(jù)源的任何操作都需

5、要一個connection對象。recordset對象包含執(zhí)行數(shù)據(jù)庫操作后返回的一個記錄集,通過該對象可以瀏覽和更新數(shù)據(jù)庫中保存的記錄。在vc應用程序中,我們需要使用connection對象建立與數(shù)據(jù)源的連接,然后通過recordset對象就可以對結果記錄集進行瀏覽、更新等操作。2.2 ado編程環(huán)境在vc+程序中使用ado對象,首先需要導入ado動態(tài)鏈接庫。引入動態(tài)鏈接庫文件的方法是在創(chuàng)建的vc工程的stdafx.h頭文件中添加如下代碼:#import “c:program filescommon filessystemadom asdo15.dkk”no_nam espace rename

6、(“eof”,“adoeof”)根據(jù)windowns操作系統(tǒng)版本不同動態(tài)鏈接庫文件可能是msado10.dll、msado15.dll或msado20.dll。在驗證時可以根據(jù)自己的實際情況進行修改。在以上的代碼中,no_namespace表示不使用ado的命名空間,rename(“eof”,”adoeof”)是為了避免沖突,將符號常量表示eof改名為adoeof。行尾添加的“”符號在c+中為續(xù)行符,表示將兩行視為一行。一般在vc工程應用類的initinstance()成員函數(shù)中添加如下初始化com庫環(huán)境的代碼,在結束對ado對象的使用后,需要釋放程序占用的com資源。一般是在vc工程應用類的

7、exitinstance()成員函數(shù)中添加釋放com資源代碼。3、建立ado封裝類3.1 ado對象基本模型ado模型包含了連接對象、命令對象、域對象、參數(shù)對象、記錄集對象、錯誤對象等。在vc中使用ado訪問數(shù)據(jù)庫基本過程是:初始化com庫,引入ado庫文件用connection對象連接數(shù)據(jù)庫利用建立好的連接,通過利用recordset對象取得結果記錄集進行查詢、處理。使用完畢后關閉連接釋放對象3.2基本操作函數(shù)和數(shù)據(jù)結構封裝的ado類應包括以下函數(shù)和數(shù)據(jù)結構:1)建立數(shù)據(jù)庫連接函數(shù)opendatabase()ado連接數(shù)據(jù)庫首先要用到connection對象,它是到數(shù)據(jù)庫的物理連接,管理著應

8、用程序和數(shù)據(jù)庫之間的通訊。對于大多數(shù)的數(shù)據(jù)庫系統(tǒng),每一 個物理連接都需要耗費大量系統(tǒng)內存,是寶貴的系統(tǒng)資源,不可濫用??紤]到應用程序的效率,每一個數(shù)據(jù)庫客戶端都只用一個物理連接,并且應用程序結束后應該 釋放。2)關閉數(shù)據(jù)庫連接函數(shù)closedatabase()3)sql查詢語句函數(shù) select()記錄集的建立和查詢結果得獲取是影響應用程序得效率得關鍵問題。由于每一次查詢結果都可能不一樣,所以每個查詢語句都要建立一個記錄集對象。4)執(zhí)行無返回結果的sql語句函數(shù)excute()5)查詢結果數(shù)組pdata為了數(shù)據(jù)類型轉換的方便,我們將記錄集數(shù)據(jù)類型都轉換為cstring類型,存放在查詢結果數(shù)組p

9、data中,由于c+的cstring是一個高效和功能強大的類,我們可以很方便地讀取記錄集中的查詢結果。6)結果數(shù)組大小nresultrow和nresultcol4、使用ado封裝類建立了ado封裝類后,使用數(shù)據(jù)庫操作就非常簡單了。在需使用數(shù)據(jù)庫查詢的cpp文件中包含ado封裝類頭文件"adodb.h",然后定義一個 cadodb類指針;接下來就是打開數(shù)據(jù)庫連接。使用封裝類的成員函數(shù)opendatabase(),輸入要連接的數(shù)據(jù)庫的dsn名稱、用戶名和密碼, 就與數(shù)據(jù)庫建立連接了。要注意的是如果同時連接多個數(shù)據(jù)庫就要聲明多個cadodb對象指針,保證數(shù)據(jù)庫連接對象是全局且惟一

10、。接下來就是,調用成員函數(shù) select取得數(shù)據(jù)庫查詢結果,執(zhí)行完畢后查詢結果放在cadodb的成員字符數(shù)組指針pdata中,數(shù)組大小可以從成員變量nresultrow和 nresultcol中得出?;静襟E如下:在"stdafx.h"中加入ado庫的導入語句#import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("eof","adoeof") 在應用程序類中初始化com對象,在initinstance()中加入以下

11、語句afxoleinit();  加入封裝類的聲明文件#include "adodb.h" 定義封裝類對象cadodb ado1; /連接數(shù)據(jù)庫1cadodb ado2; /連接數(shù)據(jù)庫2ado1.opendatabase("數(shù)據(jù)源名稱","用戶id","用戶密碼") /建立連接,第一次連接時調用ado1.select("select * from 表名"); /執(zhí)行sql查詢語句int nrow= ado1.getresultrow(); /取得記錄行數(shù)int ncol= ado1.g

12、etresultcol(); /取得記錄列數(shù)for(i=0;i<nrow;i+) /取得查詢結果for(j=0;j<ncol;j+)printf("第%d行第%d列的值是%s",i,j,ado1.pdatai*ncol+j;ado1.closedatabase(); /使用完后關閉數(shù)據(jù)庫連接5、用ado對象訪問數(shù)據(jù)庫5.1 連接數(shù)據(jù)庫在導入ado dll之后,對于ado的connection、command和recordset三個主體對象,動態(tài)鏈接庫為我們生成了3個智能指針:_connectionptr、_commandptr和_recordsetptr。利用_

13、connectionptr智能指針可以建立一個數(shù)據(jù)庫連接,其操作步驟是:首先聲明一個_connectionptr指針并調用createinstance()函數(shù)創(chuàng)建一個connection對象實例,然后調用open()函數(shù)建立到數(shù)據(jù)源的連接。建立connection對象到數(shù)據(jù)源連接的open函數(shù)的原型為:hresult open(_bstr_tconnectionstring,_bstr_tuserid,_bstr_tpassword,long options);其中參數(shù)connectionstring表示連接信息的字符串,userid用于指定連接到數(shù)據(jù)源的用戶id,password用于指定連接

14、到數(shù)據(jù)源的密碼,options用于指明是同步進行還是異步進行,該參數(shù)可以是adconnectunspecifiled(同步)和adasyncconnect(異步)兩個枚舉常量。連接sql server數(shù)據(jù)庫的示例程序代碼如下:_connectionptr m_pconn;m_pconn.createinstance(_uuidof(connection);/創(chuàng)建connection對象實例m_pconn->open (“provider=sqlshujuku.1;data source=lgtf;initial catalog=student;user id=sa;password=12

15、3456”,”,”,adconnectunspecified);上面代碼中的“sqlshujuku.1”代表數(shù)據(jù)提供程序,“l(fā)gtf”是sql server服務器名,如果是本地服務器,則可以寫成“(local)”。“student”是登錄的數(shù)據(jù)庫名,“123456”是登錄服務器的密碼,在驗證是可以根據(jù)自己的具體情況進行修改。在應用程序中,一般在使用完成數(shù)據(jù)庫后,應該關閉與數(shù)據(jù)源的連接。ado在關閉連接的同時,也將關閉所有使用這個連接的ado對象。關閉連接的代碼:m_pconn->close();m_pconn=nill。5.2 操作記錄 在ado數(shù)據(jù)庫編程中,recordset對象代表一

16、個表的記錄集合或者是一個sql語句或存儲過程的執(zhí)行結果。通過recordset對象我們就可以進行查詢、添加記錄、修改記錄和刪除記錄等的操作。5.2.1 打開與關閉記錄集 要操作訪問記錄集,就必須先打開記錄集。其操作步驟是:首先聲明一個_recordsetptr指針并調用createinstance()函數(shù)創(chuàng)建一個rrcordset對象實例,然后調用open()函數(shù)打開記錄集。open()函數(shù)原型如下:hresult open(const_variant_t& source,const_variant_t&activeconnection,enum cursortypeenum

17、cursortype,enum locktypeenum locktype,long options);其中,參數(shù)source用于指定打開記錄集的數(shù)據(jù)源,它可以是command對象變量、sql語句、表名或存儲過程;activeconnection是一個連接對象的變量名或者是一個包含連接信息的字符串,用于指定是在哪一個連接中打開記錄集;cursortype是一個cursortypeenum枚舉類型常量,用于指定打開記錄集市使用的游標,取值可以是adopenstatic(靜態(tài)游標)、adopendynamic(動態(tài)游標)、adopenforwardonly(前向游標)、和adopenkeyset(

18、鍵集游標)之一;locktype是一個locktypeenum枚舉類型常量,用于指定打開記錄集時使用的鎖定類型,取值可以是adlockreadonly(只讀)、adlockpessimistic(悲觀鎖定)、adlockoptimistic(樂觀鎖定)和adlockbatchoptimistic(樂觀批量更新)之一。示例程序代碼如下:_recordsetptr m_prs;m_prs.createinstance(_uuidof(recordset); /創(chuàng)建recordset對象實例m_prs->open (“select *from addresslist”,m_pconnectio

19、n.getinterfaceptri(),adopendynamic,adlockoptimistic,adcmdtext);對記錄集的操作完成后,應關閉記錄,釋放占用的系統(tǒng)資源。調用recordset對象的close()函數(shù)可以關閉記錄集,示例代碼如下:m_prs.close();m_prs=null;5.2.2 在記錄集中定位在記錄集被打開后,就可以訪問記錄集中的當前記錄了,但如果要向訪問其他記錄,就需要在記錄集中移動游標來進行定位。recordset對象提供了4個成員函數(shù):movefirst()、movelast()、moveprevious()和movenext(),來幫助我們在記錄集中進行定位。如果當前記錄是第一條記錄,則調用moveprevious()函數(shù)后,游標移動到第一條記錄的前面,此時,如果進行記錄的存取操作或者是再次調用了moveprevious()函數(shù),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論