過使用WindowsAPI函數直接初始化ADO對象。為了直接使用ADO和COM對象,需要添加兩個頭文件adoid.h和adoint.h,這兩個頭文件定義了CLSIDs、接口定義和操作ADO類型庫所需要的枚舉類型。此外,還需要增加頭文件INITGUID.H。
為了能夠編譯用COMAPI創建的ADO工程文件,還需要在機器中安裝OLEDBSDK或者是MSDASDK工具。下麵是利用API創建ADO的簡單的示例代碼:
#include
#include
#include“adoid.h”\/\/ADO的GUID's
#include“adoint.h”\/\/ADO的類、枚舉等等
voidmain()
HRESULThr=S_OK;
\/\/ADORecordset是在adoint.h中定義的
ADORecordset*Rs1=NULL;
VARIANTSource;
VARIANTConnect;
VariantInit(&Source);
VariantInit(&Connect);
Source.vt=VT_BSTR;
Source.bstrVal=::SysAllocString(L“SELECT*FROMAuthors”);
Connect.vt=VT_BSTR;
Connect.bstrVal=::SysAllocString(L“DSN=AdoDemo;UID=sa;PWD=;”);
hr=CoCreateInstance(CLSID_CADORecordset,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADORecordset,
(LPVOID*)&Rs1);
if(SUCCEEDED(hr))hr=Rs1->Open
(Source,
Connect,
adOpenForwardOnly,
adLockReadOnly,
-1);
\/\/對記錄集Rs1進行處理
if(SUCCEEDED(hr))hr=Rs1->Close();
if(SUCCEEDED(hr)){Rs1->Release();Rs1=NULL;}
if(SUCCEEDED(hr))::MessageBox(NULL,“Success!”,“”,MB_OK);
C++Extensions
如果用C++進行ADO應用程序開發,應該使用ADOC++Extensions。我們知道,用VB或者VBScript來操作ADO是非常方便的,但是如果使用C++或者是Java,就必須要處理類似Variants這樣的數據結構以實現和C++數據結構的轉換,而這種處理無疑是所有C++開發人員都很頭疼的事情。但如果使用C++Extensions的話,ADO就不需要從數據提供者處得到列信息,而是在設計時刻使用開發人員提供的列信息。以下是一個簡單的示例:
\/\/創建和具體記錄相對應的類
classCAuthor:publicCADORecordBinding
BEGIN_ADO_BINDING(CCustomRs1)
ADO_VARIABLE_LENGTH_ENTRY4(1,
adVarChar,m_szau_id,sizeof(m_szau_id),FALSE)
ADO_VARIABLE_LENGTH_ENTRY4(2,
adVarChar,m_szau_fname,sizeof(m_szau_fname),FALSE)
ADO_VARIABLE_LENGTH_ENTRY4(3,
adVarChar,m_szau_lname,sizeof(m_szau_lname),FALSE)
END_ADO_BINDING()
protected:
charm_szau_id;
charm_szau_fname;
;emanl_uazs_mrahc
;}
𝑤𝑡.𝑝𝑜𝑜問訪請,新更節章新最取獲
)(ataDrohtuAhcteFdiov
;rohtuarohtuAC
象對集錄記/\/\
;sRprtPtesdroceR_
;gnidniBdroceRodAip*gnidniBdroceRODAI
針指口接象對MOC取獲/\/\
;))tesdroceR(fodiuu__(ecnatsnIetaerC.sRp
集錄記的要需到得/\/\
,”;=drowssaP;as=dIresU;sbup=esabataD;1khserus=ecruoSataD;BDELOLQS=redivorP“,”seeyolpmEmorfemanl_ua,emanf_ua,di_uatceles“(nepO>-sRp
,ylnOdrawroFnepOda
,ylnOdaeRkcoLda
;)txeTdmCda
gnidniBdroceRODAI口接詢查/\/\
;)gnidniBdroceRodAip&)*DIOVPL(,)gnidniBdroceRODAI(fodiuu__(ecafretnIyreuQ>-sRp
象對定綁/\/\
;)rohtua&(tesdroceRoTdniB>-gnidniBdroceRodAip
容內關相的中錄記到得/\/\
{)FOE>-sRp==ESLAF_TNAIRAV(elihw
,di_uazs_m.rohtua,”s%s%s%“(ftnirp
emanl_uazs_m.rohtua,emanf_uazs_m.rohtua