ä¸ãADOæ¦è¿°
ããADOæ¯Microsoft为ææ°åæ强大çæ°æ®è®¿é®èä¾ OLE DB è设计çï¼æ¯ä¸ä¸ªä¾¿äºä½¿ç¨çåºç¨ç¨åºå±æ¥å£ãADO 使æ¨è½å¤ç¼ååºç¨ç¨åºä»¥éè¿ OLE. DB æä¾è
访é®åæä½æ°æ®åºæå¡å¨ä¸çæ°æ®ãADO æ主è¦çä¼ç¹æ¯æäºä½¿ç¨ãé度快ãå
åæ¯åºå°åç£çé迹å°ãADO å¨å
³é®çåºç¨æ¹æ¡ä¸ä½¿ç¨æå°çç½ç»æµéï¼å¹¶ä¸å¨å端åæ°æ®æºä¹é´ä½¿ç¨æå°çå±æ°ï¼ææè¿äºé½æ¯ä¸ºäºæä¾è½»éãé«æ§è½çæ¥å£ãä¹æ以称为 ADOï¼æ¯ç¨äºä¸ä¸ªæ¯è¾çæçæå»ï¼OLE èªå¨åæ¥å£ã
ããOLE DBæ¯ä¸ç»âç»ä»¶å¯¹è±¡æ¨¡åâ(COM) æ¥å£ï¼æ¯æ°çæ°æ®åºä½å±æ¥å£ï¼å®å°è£
äºODBCçåè½ï¼å¹¶ä»¥ç»ä¸çæ¹å¼è®¿é®åå¨å¨ä¸åä¿¡æ¯æºä¸çæ°æ®ãOLE DBæ¯Microsoft UDA(Universal Data Access)çç¥çææ¯åºç¡ãOLE DB 为任ä½æ°æ®æºæä¾äºé«æ§è½ç访é®ï¼è¿äºæ°æ®æºå
æ¬å
³ç³»åéå
³ç³»æ°æ®åºãçµåé®ä»¶åæ件系ç»ãææ¬åå¾å½¢ãèªå®ä¹ä¸å¡å¯¹è±¡ççãä¹å°±æ¯è¯´ï¼OLE DB 并ä¸å±éäº ISAMãJet çè³å
³ç³»æ°æ®æºï¼å®è½å¤å¤çä»»ä½ç±»åçæ°æ®ï¼èä¸èèå®ä»¬çæ ¼å¼ååå¨æ¹æ³ãå¨å®é
åºç¨ä¸ï¼è¿ç§å¤æ ·æ§æå³çå¯ä»¥è®¿é®é©»çå¨ Excel çµåæ°æ®è¡¨ãææ¬æ件ãçµåé®ä»¶/ç®å½æå¡çè³é®ä»¶æå¡å¨ï¼è¯¸å¦ Microsoft Exchange ä¸çæ°æ®ãä½æ¯ï¼OLE DB åºç¨ç¨åºç¼ç¨æ¥å£çç®çæ¯ä¸ºåç§åºç¨ç¨åºæä¾æä½³çåè½ï¼å®å¹¶ä¸ç¬¦åç®ååçè¦æ±ãæ¨éè¦çAPI åºè¯¥æ¯ä¸åº§è¿æ¥åºç¨ç¨åºåOLE DB çæ¡¥æ¢ï¼è¿å°±æ¯ ActiveX Data Objects (ADO)ã
äºãå¨VCä¸ä½¿ç¨ADO(å¼åæ¥éª¤å¦ä¸ï¼)
1ãå¼å
¥ADOåºæ件
ãã使ç¨ADOåå¿
é¡»å¨å·¥ç¨çstdafx.h头æ件éç¨ç´æ¥å¼å
¥ç¬¦å·#importå¼å
¥ADOåºæ件,以使ç¼è¯å¨è½æ£ç¡®ç¼è¯ã代ç å¦ä¸æ示ï¼
ç¨#importå¼å
¥ADOåºæ件
#import "c:\program files\common files\system\ado\msado15.dll"no_namespaces rename("EOF" adoEOF")
ããè¿è¡è¯å¥å£°æå¨å·¥ç¨ä¸ä½¿ç¨ADOï¼ä½ä¸ä½¿ç¨ADOçåå空é´ï¼å¹¶ä¸ä¸ºäºé¿å
常æ°å²çªï¼å°å¸¸æ°EOFæ¹å为adoEOFãç°å¨ä¸éæ·»å å¦å¤ç头æ件ï¼å°±å¯ä»¥ä½¿ç¨ADOæ¥å£äºã
2ãåå§åOLE/COMåºç¯å¢
ããå¿
须注æçæ¯ï¼ADOåºæ¯ä¸ç»COMå¨æåºï¼è¿æå³åºç¨ç¨åºå¨è°ç¨ADOåï¼å¿
é¡»åå§åOLE/COMåºç¯å¢ãå¨MFCåºç¨ç¨åºéï¼ä¸ä¸ªæ¯è¾å¥½çæ¹æ³æ¯å¨åºç¨ç¨åºä¸»ç±»çInitInstanceæåå½æ°éåå§åOLE/COMåºç¯å¢ã
BOOL CMyAdoTestAppï¼ï¼InitInstance()
{
if(!AfxOleInit())//è¿å°±æ¯åå§åCOMåº
{
AfxMessageBox(âOLEåå§ååºé!â);
return FALSE;
}
â¦â¦
}
3ãADOæ¥å£ç®ä»
ããADOåºå
å«ä¸ä¸ªåºæ¬æ¥å£:_ConnectionPtræ¥å£ã_CommandPtræ¥å£å_RecordsetPtræ¥å£ã
ãã_ConnectionPtræ¥å£è¿åä¸ä¸ªè®°å½éæä¸ä¸ªç©ºæéãé常使ç¨å®æ¥å建ä¸ä¸ªæ°æ®è¿æ¥ææ§è¡ä¸æ¡ä¸è¿åä»»ä½ç»æçSQLè¯å¥ï¼å¦ä¸ä¸ªåå¨è¿ç¨ã使ç¨_ConnectionPtræ¥å£è¿åä¸ä¸ªè®°å½éä¸æ¯ä¸ä¸ªå¥½ç使ç¨æ¹æ³ã对äºè¦è¿åè®°å½çæä½é常ç¨_RecordserPtræ¥å®ç°ãèç¨_ConnectionPtræä½æ¶è¦æ³å¾å°è®°å½æ¡æ°å¾éåææè®°å½ï¼èç¨_RecordserPtræ¶ä¸éè¦ã
ãã_CommandPtræ¥å£è¿åä¸ä¸ªè®°å½éãå®æä¾äºä¸ç§ç®åçæ¹æ³æ¥æ§è¡è¿åè®°å½éçåå¨è¿ç¨åSQLè¯å¥ãå¨ä½¿ç¨_CommandPtræ¥å£æ¶ï¼ä½ å¯ä»¥å©ç¨å
¨å±_ConnectionPtræ¥å£ï¼ä¹å¯ä»¥å¨_CommandPtræ¥å£éç´æ¥ä½¿ç¨è¿æ¥ä¸²ãå¦æä½ åªæ§è¡ä¸æ¬¡æå 次æ°æ®è®¿é®æä½ï¼åè
æ¯æ¯è¾å¥½çéæ©ãä½å¦æä½ è¦é¢ç¹è®¿é®æ°æ®åºï¼å¹¶è¦è¿åå¾å¤è®°å½éï¼é£ä¹ï¼ä½ åºè¯¥ä½¿ç¨å
¨å±_ConnectionPtræ¥å£å建ä¸ä¸ªæ°æ®è¿æ¥ï¼ç¶å使ç¨_CommandPtræ¥å£æ§è¡åå¨è¿ç¨åSQLè¯å¥ã
ãã_RecordsetPtræ¯ä¸ä¸ªè®°å½é对象ãä¸ä»¥ä¸ä¸¤ç§å¯¹è±¡ç¸æ¯ï¼å®å¯¹è®°å½éæä¾äºæ´å¤çæ§å¶åè½ï¼å¦è®°å½éå®ï¼æ¸¸æ æ§å¶çãå_CommandPtræ¥å£ä¸æ ·ï¼å®ä¸ä¸å®è¦ä½¿ç¨ä¸ä¸ªå·²ç»å建çæ°æ®è¿æ¥ï¼å¯ä»¥ç¨ä¸ä¸ªè¿æ¥ä¸²ä»£æ¿è¿æ¥æéèµç»_RecordsetPtrçconnectionæååéï¼è®©å®èªå·±å建æ°æ®è¿æ¥ãå¦æä½ è¦ä½¿ç¨å¤ä¸ªè®°å½éï¼æ好çæ¹æ³æ¯åCommand对象ä¸æ ·ä½¿ç¨å·²ç»å建äºæ°æ®è¿æ¥çå
¨å±_ConnectionPtræ¥å£
ï¼ç¶å使ç¨_RecordsetPtræ§è¡åå¨è¿ç¨åSQLè¯å¥ãã
4ã使ç¨_ConnectionPtræ¥å£
ãã_ConnectionPtr主è¦æ¯ä¸ä¸ªè¿æ¥æ¥å£ï¼åå¾ä¸æ°æ®åºçè¿æ¥ãå®çè¿æ¥å符串å¯ä»¥æ¯èªå·±ç´æ¥åï¼ä¹å¯ä»¥æåä¸ä¸ªODBCãDSNãã
_ConnectionPtr pConn;
if (FAILED(pConn.CreateInstance("ADODB.Connection")))
{
AfxMessageBox("Create Instance failed!");
return;
}
CString strSRC;
strSRC="Driver=SQL Server;Server=";
strSRC+="suppersoft";
strSRC+=";Database=";
strSRC+="mydb";
strSRC+=";UID=SA;PWD=";
CString strSQL = "Insert into student(no,name,sex,address) values(3,'aaa','male','beijing')";
_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);
_bstr_t bstrSRC(strSRC);
if (FAILED(pConn->Open(bstrSRC,"","",-1)))
{
AfxMessageBox("Can not open Database!");
pConn.Release();
return;
}
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
pConn->Execute(_bstr_t(strSQL),&vtOptional,-1);
pConn.Release();
AfxMessageBox("ok!");
5ã使ç¨_RecordsetPtræ¥å£(以è¿æ¥SQL Server为ä¾)
_RecordsetPtr pPtr;
if (FAILED(pPtr.CreateInstance("ADODB.Recordset")))
{
AfxMessageBox("Create Instance failed!");
return FALSE;
}
CString strSRC;
strSRC="Driver=SQL Server;Server=";
strSRC+="210.46.141.145";
strSRC+=";Database=";
strSRC+="mydb";
strSRC+=";UID=sa;PWD=";
strSRC+="sa";
CString strSQL = "select id,name,gender,address from personal";
_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);
if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
{
AfxMessageBox("Open table failed!");
pPtr.Release();
return FALSE;
}
while(!pPtr->GetadoEOF())
{
_variant_t varNo;
_variant_t varName;
_variant_t varSex;
_variant_t varAddress;
varNo = pPtr->GetCollect ("id");
varName = pPtr->GetCollect ("name");
varSex = pPtr->GetCollect ("gender");
varAddress = pPtr->GetCollect ("address");
CString strNo =(char *)_bstr_t(varNo);
CString strName =(char *)_bstr_t(varName);
CString strSex =(char *)_bstr_t(varSex);
CString strAddress =(char *)_bstr_t(varAddress);
strNo.TrimRight();
strName.TrimRight();
strSex.TrimRight();
strAddress.TrimRight();
int nCount = m_list.GetItemCount();
int nItem = m_list.InsertItem (nCount,_T(""));
m_list.SetItemText (nItem,0,strNo);
m_list.SetItemText (nItem,1,strName);
m_list.SetItemText (nItem,2,strSex);
m_list.SetItemText (nItem,3,strAddress);
pPtr->MoveNext();
}
pPtr->Close();
pPtr.Release();
6ã使ç¨_CommandPtræ¥å£
ãã_CommandPtræ¥å£è¿åä¸ä¸ªRecordset对象ï¼å¹¶ä¸æä¾äºæ´å¤çè®°å½éæ§å¶åè½ï¼ä»¥ä¸ä»£ç 示ä¾äºä½¿ç¨_CommandPtræ¥å£çæ¹æ³ï¼
ãã代ç :使ç¨_CommandPtræ¥å£è·åæ°æ®
_CommandPtr pCommand;
_RecordsetPtr pRs;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection=pConn;
pCommand->CommandText="select * from student";
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
pRs=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t varValue = pRs->GetCollect("name");
Cstring strValue=(char*)_bstr_t(varValue);
7ãå
³äºæ°æ®ç±»å转æ¢ç±äºCOM对象æ¯è·¨å¹³å°çï¼å®ä½¿ç¨äºä¸ç§éç¨çæ¹æ³æ¥å¤çåç§ç±»åçæ°æ®ï¼å æ¤Cstring ç±»åCOM对象æ¯ä¸å
¼å®¹çï¼æ们éè¦ä¸ç»APIæ¥è½¬æ¢COM对象åC++ç±»åçæ°æ®ã_vatiant_tå_bstr_tå°±æ¯è¿æ ·ä¸¤ç§å¯¹è±¡ãå®ä»¬æä¾äºéç¨çæ¹æ³è½¬æ¢COM对象åC++ç±»åçæ°æ®ã
温馨提示:内容为网友见解,仅供参考