兩種方法實(shí)現(xiàn)ADO.NET記錄集獲取記錄數(shù)量
學(xué)習(xí)ADO.NET時(shí),你可能會(huì)遇到ADO.NET記錄集問(wèn)題,這里將介紹ADO.NET記錄集問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。VC使用ADO技術(shù)訪問(wèn)數(shù)據(jù)表,打開數(shù)據(jù)表后,獲得了ADO記錄集,如何獲得記錄數(shù)量?一個(gè)小問(wèn)題,沒(méi)想到還有點(diǎn)意思,實(shí)踐完成,總結(jié)一下。
方法一、用靜態(tài)、鍵集游標(biāo)方式打開數(shù)據(jù)表
- p_hr = m_pRecordset->Open(_variant_t(bstrQuery),vNull,adOpenStatic,adLockOptimistic,adCmdText);
然后用GetRecordCount()函數(shù),即可獲得記錄數(shù)量。
- m_pRecordset->GetRecordCount();
#T#另外用鍵集游標(biāo)方式也可以獲得,adOpenKeyset (鍵集游標(biāo)),但是用adOpenDynamic (動(dòng)態(tài)游標(biāo))方式,就只會(huì)返回-1。多個(gè)用戶都使用同一張表,且對(duì)其進(jìn)行修改的可能都很大,則***使用adOpenKeyset。如只是瀏覽, 使用adOpenStatic 可提高性能! 補(bǔ)充:adOpenStatic 靜態(tài)游標(biāo) , 其它用戶的修改對(duì)當(dāng)前用戶是不可見的. adOpenDynamic 動(dòng)態(tài)游標(biāo) , 所有的修改對(duì)當(dāng)前用戶是見的. adOpenKeyset 是前兩種的折衷 , 改對(duì)當(dāng)前用戶是見的. 但性能是***的.
方法二、用SQL語(yǔ)句實(shí)現(xiàn)
- “select count(*) from 表名;”,這樣就不用關(guān)心游標(biāo)的方式了。
例子如下:
- rs->Open("select COUNT(*) from tbUsersInfo",strCnn,
- adOpenKeyset,adLockOptimistic,adCmdText);
- long RecordCount;
- RecordCount=rs->Fields->GetItem((long)0)->GetValue();
還有一個(gè)例子:
- m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM 表名",&RecordsAffected,adCmdText);
- _variant_t vIndex = (long)0;
- _variant_t vCount = m_pRecordset->GetCollect(vIndex);
- CString message;
- message.Format("共有%d條記錄",vCount.lVal);
- AfxMessageBox(message);
補(bǔ)充:
先將ADO記錄集的
- CursorLocation = adUseClient;
然后就可以了,總之感覺很意思,一個(gè)小問(wèn)題,卻有幾種不同的解決方法,而且對(duì)于不同的數(shù)據(jù)庫(kù),還有點(diǎn)不一樣。