兩種方法實現(xiàn)ADO.NET記錄集獲取記錄數(shù)量
學習ADO.NET時,你可能會遇到ADO.NET記錄集問題,這里將介紹ADO.NET記錄集問題的解決方法,在這里拿出來和大家分享一下。VC使用ADO技術訪問數(shù)據(jù)表,打開數(shù)據(jù)表后,獲得了ADO記錄集,如何獲得記錄數(shù)量?一個小問題,沒想到還有點意思,實踐完成,總結一下。
方法一、用靜態(tài)、鍵集游標方式打開數(shù)據(jù)表
- p_hr = m_pRecordset->Open(_variant_t(bstrQuery),vNull,adOpenStatic,adLockOptimistic,adCmdText);
然后用GetRecordCount()函數(shù),即可獲得記錄數(shù)量。
- m_pRecordset->GetRecordCount();
#T#另外用鍵集游標方式也可以獲得,adOpenKeyset (鍵集游標),但是用adOpenDynamic (動態(tài)游標)方式,就只會返回-1。多個用戶都使用同一張表,且對其進行修改的可能都很大,則***使用adOpenKeyset。如只是瀏覽, 使用adOpenStatic 可提高性能! 補充:adOpenStatic 靜態(tài)游標 , 其它用戶的修改對當前用戶是不可見的. adOpenDynamic 動態(tài)游標 , 所有的修改對當前用戶是見的. adOpenKeyset 是前兩種的折衷 , 改對當前用戶是見的. 但性能是***的.
方法二、用SQL語句實現(xiàn)
- “select count(*) from 表名;”,這樣就不用關心游標的方式了。
例子如下:
- rs->Open("select COUNT(*) from tbUsersInfo",strCnn,
- adOpenKeyset,adLockOptimistic,adCmdText);
- long RecordCount;
- RecordCount=rs->Fields->GetItem((long)0)->GetValue();
還有一個例子:
- 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);
補充:
先將ADO記錄集的
- CursorLocation = adUseClient;
然后就可以了,總之感覺很意思,一個小問題,卻有幾種不同的解決方法,而且對于不同的數(shù)據(jù)庫,還有點不一樣。