當前位置:首頁 > 工業(yè)控制 > 電子設計自動化
[導讀]摘 要:本文介紹了ADO訪問數據庫的基本過程,給出了一種在Visual C++下封裝ADO訪問數據庫類的方法。關鍵詞:封裝;ADO;Visual C1 引言在過去幾年中,微軟公司相繼推出了幾種數據訪問技術,先是DAO(Data Access Objec

摘 要:本文介紹了ADO訪問數據庫的基本過程,給出了一種在Visual C++下封裝ADO訪問數據庫類的方法。

關鍵詞:封裝;ADO;Visual C

1 引言

在過去幾年中,微軟公司相繼推出了幾種數據訪問技術,先是DAO(Data Access Objects),然后是RDO(Remote Data Objects),現(xiàn)在是ADO(ActiceX Data Objects)。ADO是Microsoft數據庫應用程序開發(fā)的新接口,是微軟最新的數據訪問技術。它被設計用來同新的數據訪問層OLE DB Provider一起協(xié)同工作,以提供通用數據訪問(Universal Data Access)。ADO向我們提供了一個熟悉的,高層的對OLE DB的Automation封裝接口,它簡化了數據訪問的過程,增加了數據訪問的靈活性,是當前數據訪問接口的主流技術。

用VB或者VBScript來操作ADO是非常方便的,但是如果使用C++或者是Java,就必須要處理類似Variants這樣的數據結構,從而實現(xiàn)和C++數據結構的轉換,而這種處理無疑是C++開發(fā)人員都很頭疼的事情。而且ADO是應用層的編程接口,它通過OLE DB提供的COM接口訪問數據,使用ADO訪問數據庫需要使用許多API函數和ADO的對象,對于初學者來說,可能有些難度。即便對于ADO的編程高手,經常要書寫大量相同的ADO冗余代碼,也會感到厭煩??催^網上不少紹封裝ADO的各種文章,也各有利弊。筆者在Visual C++下也嘗試封裝ADO訪問數據庫類,使其更方便地使用現(xiàn)有的VC的數據類型,簡化應用程序書寫的邏輯,增加程序的可讀性。達到了比較好的應用效果,本文將給出筆者所使用封裝方法和源程序。

2 建立ADO封裝類

2.1 ADO對象基本模型

ADO模型包含了連接對象、命令對象、域對象、參數對象、記錄集對象、錯誤對象等。對象之間又具有層次關系,其關系如圖1所示。



在VC中使用ADO訪問數據庫基本過程是:

初始化COM庫,引入ADO庫文件

用Connection對象連接數據庫

利用建立好的連接,通過利用Recordset對象取得結果記錄集進行查詢、處理。

使用完畢后關閉連接釋放對象



2.2基本操作函數和數據結構

封裝的ADO類應包括以下函數和數據結構:

1)建立數據庫連接函數OpenDataBase()

ADO連接數據庫首先要用到Connection對象,它是到數據庫的物理連接,管理著應用程序和數據庫之間的通訊。對于大多數的數據庫系統(tǒng),每一個物理連接都需要耗費大量系統(tǒng)內存,是寶貴的系統(tǒng)資源,不可濫用??紤]到應用程序的效率,每一個數據庫客戶端都只用一個物理連接,并且應用程序結束后應該釋放。

2)關閉數據庫連接函數CloseDataBase()

3)SQL查詢語句函數 Select()

記錄集的建立和查詢結果得獲取是影響應用程序得效率得關鍵問題。由于每一次查詢結果都可能不一樣,所以每個查詢語句都要建立一個記錄集對象。

4)執(zhí)行無返回結果的SQL語句函數Excute()

5)查詢結果數組pData

為了數據類型轉換的方便,我們將記錄集數據類型都轉換為CSTring類型,存放在查詢結果數組pData中,由于C++的CString是一個高效和功能強大的類,我們可以很方便地讀取記錄集中的查詢結果。

6)結果數組大小nResultRow和nResultCol
2.3 ADO封裝類頭文件

封裝類頭文件ADODB.H定義如下:

class CADODB : public CObject
{
public:
CADODB(); //構造函數
~CADODB(); //析構函數
public:
int nResultRow; //查詢結果行數
int nResultCol; //查詢結果列數
CStringArray pData; //存放查詢結果數組 大小為nRow*nCol
CString errormessage; //ADO錯誤信息
bool OpenDataBase(CString DsnName,CString sUserID,CString sPassword);
//打開數據庫連接 輸入DSN名稱、用戶ID和密碼
int Select(CString Sql); //執(zhí)行SQL查詢語句,結果放在數組pData中
int Excute(CString Sql); //執(zhí)行無返回值得SQL語句
bool CloseDataBase(); //關閉數據庫連接
protected:
_ConnectionPtr m_pConnection; //定義連接指針
};

2.4 封裝類實現(xiàn)文件

封裝類實現(xiàn)文件ADODB.CPP如下:

#include "stdafx.h"
#include "ADODB.h"

CADODB::CADODB() //構造函數,完成初始化
{
nResultRow=0; //
nResultCol=0; //記錄集行數和列數
m_pConnection = NULL;
}

CADODB::~CADODB() //關閉數據庫物理連接
{
if(m_pConnection )m_pConnection->Close();
m_pConnection = NULL;
}

bool CADODB::OpenDataBase(CString DsnName,CString sUserID,CString sPassword)
{ //打開數據庫連接

HRESULT hr=m_pConnection.CreateInstance("ADODB.Connection");//創(chuàng)建連接對象
hr=m_pConnection->Open((_bstr_t)DsnName,(_bstr_t)sUserID,(_bstr_t)sPassword,adOpenUnspecified); //連接數據庫

}

int CADODB::Select(CString SqlStr) //SQL查詢語句函數
{ …
try
{
hr = m_pRecordset.CreateInstance("ADODB.Recordset");//創(chuàng)建紀錄集對象實例
hr = m_pRecordset->putref_ActiveConnection(m_pConnection);//設置連接對象
hr=m_pRecordset->Open(vSqlString,vNull,adOpenDynamic,adLockOptimistic,adCmdText); //打開紀錄集
nResultCol = m_pRecordset->Fields->GetCount();//獲得紀錄集總列數
while(!m_pRecordset->adoEOF)
{
for (j = 0; j < nResultCol; j++) //取一列數據
{
vValue = m_pRecordset->Fields->Item[(long)j]->Value;//取得當前記錄字段數據
if(vValue.vt != 1) //數據非空
{
int type = vValue.vt;
if(VariantChangeType(&vValue1, &vValue, 0, VT_BSTR) == S_OK) //轉換數據類型(為字符串)
str=vValue1.bstrVal; //保存結果值到臨時變量str中
}
if(pData.GetSize()<i*nResultCol+j+1) //動態(tài)設置數組的大小
m_pResult.SetSize(i*nResultCol+j+1);
pData[i*nResultCol+j]=str; //保存結果到數組中
m_pRecordset->MoveNext(); //移動記錄集指針到下一行
i++;
}
m_pRecordset->Close();
m_pRecordset=NULL;
nResultRow=i;
}
catch(_com_error e)///捕捉異常
{


}
pData->FreeExtra();//釋放多余的內存空間
return nResultRow;
}
… 3 使用ADO封裝類

建立了ADO封裝類后,使用數據庫操作就非常簡單了。在需使用數據庫查詢的CPP文件中包含ADO封裝類頭文件"ADODB.H",然后定義一個CADODB類指針;接下來就是打開數據庫連接。使用封裝類的成員函數OpenDataBase(…),輸入要連接的數據庫的DSN名稱、用戶名和密碼,就與數據庫建立連接了。要注意的是如果同時連接多個數據庫就要聲明多個CADODB對象指針,保證數據庫連接對象是全局且惟一。接下來就是,調用成員函數Select取得數據庫查詢結果,執(zhí)行完畢后查詢結果放在CADODB的成員字符數組指針pData中,數組大小可以從成員變量nResultRow和nResultCol中得出。基本步驟如下:

在"stdafx.h"中加入ADO庫的導入語句

#import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF","adoEOF")
在應用程序類中初始化COM對象,在InitInstance()中加入以下語句

AfxOleInit();
加入封裝類的聲明文件

#include "ADODB.H"

定義封裝類對象

CADODB ADO1; //連接數據庫1
CADODB ADO2; //連接數據庫2

ADO1.OpenDataBase("數據源名稱","用戶ID","用戶密碼") //建立連接,第一次連接時調用
ADO1.Select("select * from 表名"); //執(zhí)行SQL查詢語句
int nRow= ADO1.GetResultRow(); //取得記錄行數
int nCol= ADO1.GetResultCol(); //取得記錄列數
for(i=0;i<nRow;i++) //取得查詢結果
for(j=0;j<nCol;j++)
printf("第%d行第%d列的值是%s",i,j,ADO1.pData[i*nCol+j];

ADO1.CloseDataBase(); //使用完后關閉數據庫連接
4 結論和建議

使用封裝ADO類后,在應用程序中操作數據庫的過程就變得簡單了,針對一般的數據庫應用程序,而且在數據量不很大的情況下,本封裝類已經能夠應付,在使用效率上也比較滿意。但是該封裝沒有考慮數據訪問的優(yōu)化處理,數據庫使用了動態(tài)連接方式,記錄集也沒有進行分頁處理,ADO緩沖區(qū)大小和游標類型都采用缺省設置,這些在實際使用中都可能降低封裝類的性能,讀者可以根據不同的應用情況有針對地進行修改。


來源:0次

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉