ADO(ActiveX DataObject的簡稱)是Microsoft為最新和最強大的數據訪問范例OLE DB而設計的,是一個便于使用的應用程序層接口。ADO通過OLEDB提供訪問和操作數據庫服務器中的數據。ADO不僅可以訪問關系型數據庫,還可以訪問非關系型數據庫。同時由于OLEDB是基于COM接口的技術,使用這種技術可以直接對數據庫的驅動程序進行訪問,從而大大提供了訪問速度。與眾多的數據庫編程接口比較,ADO具有易于使用、速度快、內存支出少和磁盤遺跡小等優(yōu)點。
但由于Microsoft并沒有提供有關ADO的類,更不幸的是微軟所提供的ADO文檔幾乎沒有關于Visual C++的內容,這使得Visual C++程序開發(fā)人員要想利用ADO訪問數據庫相對比較麻煩。然而這又是每個VisualC++程序員不可回避的問題。解決這個問題的比較可行的辦法就是自己編寫這個類。本文將介紹如何具體編寫自己的ADO類。
(1)在使用ADO前必須使用#import引入ADO庫文件,其中ADO庫文件的路徑視實際情況而定,同時為了避免常數沖突,通常將常數EOF改名為adoEOF。
#import "c:\program files\commonfiles\system\ado\msado15.dll" no_namespace rename ("EOF","adoEOF") |
(2) 在使用ADO之前還必須初始化OLE庫。Visual C++.net已經在CWinApp::InitInstance()中對OLE庫進行了初始化。但是如果使用的Visual C++6.0,則必須初始化OLE庫。
if (!AfxOleInit()) |
(3)ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用來創(chuàng)建一個數據連接或執(zhí)行一條不返回任何結果的SQL語句。_CommandPtr返回一個記錄集,它提供了一種簡單的方法來執(zhí)行返回記錄集的存儲過程和SQL語句。_RecordsetPtr是一個記錄集對象,它對記錄集提供了更多的控制功能,如記錄鎖定,游標控制等。創(chuàng)建Connection對象和Recordset對象方法如下:
_ConnectionPtr m_pConnection; // 連接接口 |
(4)連接不同數據庫。參數sConnection為連接屬性設置標準。它隨數據源類型的不同而變化。以下是其常見值:
1. 訪問ODBC數據:
"Provider=MSDASQL;DSN=dsnName;UID=userName;PWD=userPassword;"
2. 訪問ACCESS 97數據庫:
"Provider=Microsoft.Jet.OLEDB.3.51;DataSource=databaseName;User ID=userName;Password=userPassword;"
3. 訪問ACCESS 2000數據庫:
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=databaseName;User ID=userName;Password=userPassword;"
4. 訪問MS SQL數據庫:
"Provider=SQLOLEDB;Data Source=serverName;InitialCatalog=databaseName;User ID=userName;Password=userPassword;"
5. 訪問ORACLE數據庫:
"Provider=MSDAORA.1;Data Source=serverName;UserID=userName;Password=userPassword;"
inline BOOL ConnectDB(CString sConnection) |
(5) 查詢:
BOOL Query(CString SqlCommand) |
(6) 修改記錄:
_variant_t vNULL;
CString SqlCommand = "UPDATE TableName SET …[ WHERE…]";
m_pConnection->Execute((_bstr_t)SqlCommand, &vNULL, adCmdText);
(7) 添加記錄:
_variant_t vNULL;
CString SqlCommand = "INSERTINTO TableName (…) VALUES (…)[WHERE…]";
m_pConnection->Execute((_bstr_t) SqlCommand,&vNULL, adCmdText);
(8) 刪除記錄:
_variant_t vNULL;
CString SqlCommand = "DELETEFROM TableName WHERE …";
m_pConnection->Execute((_bstr_t)SqlCommand, &vNULL, adCmdText);
(9) 統(tǒng)計。參數SqlCommand的形式如下:
1. 統(tǒng)計紀錄數:SELECT COUNT(*) FROM TableName[WHERE…]
2. 統(tǒng)計字段總和:SELECT SUM FieldNameFROM TableName[ WHERE…]
3. 統(tǒng)計字段平均值:SELECT AVG FieldNameFROM TableName[ WHERE…]
4. 統(tǒng)計字段最大值:SELECT MAX FieldNameFROM TableName[ WHERE…]
5. 統(tǒng)計字段最小值:SELECT MIN FieldNameFROM TableName[ WHERE…]
inline _variant_tStatistics(CString SqlCommand)
{
_variant_t vNULL;
_RecordsetPtrpRecordset;
pRecordset = m_pConnection->Execute((_bstr_t)SqlCommand, &vNULL, adCmdText);
_variant_t vCount =pRecordset->GetCollect((_variant_t) (long)0);
pRecordset->Close();
Recordset.Release();
return vCount;
}
聯(lián)系客服