recordcount
屬性返回指示
recordset
中記錄數目的
long
值。用recordcount
屬性可查詢
recordset
物件中的記錄數目。如果
ado無法確定記錄數目或者提供者或游標型別不支援
recordcount
,則該屬性返回
-1。讀取已關閉的
recordset
的recordcount
屬性將產生錯誤。
recordset
屬性取決於提供者的功能和游標型別。對於僅向前游標,
recordcount
屬性將返回
-1;對於靜態或鍵集游標,將返回實際計數;而對於動態游標,則返回
-1或實際計數,這取決於資料來源。在檢驗資料中介紹的範例
recordset
由於僅向前游標被開啟將返回
–1。為了使用
recordcount
屬性,您需要利用更先進的游標(靜態或鍵集)開啟
recordset
。在某些情況下,您的提供者或游標在首先從資料來源提取所有的記錄之前無法提供
recordcount
值。若要強制執行這種型別的記錄提取,請在呼叫
recordcount
之前呼叫
recordset
的movelast
方法。以上是
ado官方手冊的描述對記錄集計數有以下幾個方法
1.直接讀取
recordcount2.
遍歷3.
先selectcount(*)asccfromtable1,
然後再select*fromtable1
第一種方法,直接讀取
recordcount
,最簡單,但是有前提,游標位置要事先指定為客戶端游標,游標型別事先指定為靜態游標和
keyset
游標,才能夠穩定的使用該屬性。使用
connection->execute
的方法得到記錄集的游標型別依賴於資料庫和,
connection
自身的游標位置屬性,有時候返回的是唯讀向前的游標型別,這裡取得的記錄集
recordcount
屬性是-1
,所以一旦要使用這種方法,請在獲取記錄集的時候使用
recordset
的open
方法,並事先明確指定游標位置,和游標類型別第二種方法,遍歷,遍歷的方法,可以使用
movenext
來遍歷計數,但目前很多人封裝的
ado類獲取記錄集的方式是從
connection->execute
得到,得到的記錄集可能是唯讀向前的游標,在遍歷的時候是不可以使用
movefirst,movelast,move
等方法,只能使用
movenext
方法,所以要想使用所有的
move
方法,就必須使用明確的游標型別的記錄集來
open
而不是從
execute
中得到。所以目前見到的多數
ado封裝類經常在這裡出現異常。大家使用的時候必須要進行相應的修改第三種方法,是相容性比較好,不需要考慮游標型別不確定的因素。但是**量稍多游標中唯讀向前的游標是最快的,效能最好的,但如果想在
movenext
遍歷記錄集之前獲取記錄數就必須採用第三種方法。服務端游標和客戶端游標到底誰的效能快,取決於需求和系統實際的情況,以及資料庫
驅動對游標的支援程度。以下來自官方手冊,大家可以自行體會游標位置的重要性每個游標都使用臨時資源來持有其資料。這些資源可以是記憶體、磁碟分頁檔案、臨時磁碟檔案,甚至是資料庫中的臨時儲存區。當這些資源位於客戶端計算機上時,游標稱為
「客戶端
」游標。當這些資源位於伺服器上時,游標稱為
「伺服器端
」游標。客戶端游標在
ado中,通過使用
aduseclientcursorlocationenum
來呼叫客戶端游標。利用非鍵集的客戶端游標,伺服器將整個結果集通過網路傳送給客戶端計算機。客戶端計算機提供並管理游標和結果集所需要的臨時資源。客戶端應用程式可以瀏覽整個結果集,以確定它需要哪些行。如果靜態的和鍵集
驅動ado
中,通過使用
aduseservercursorlocationenum
來呼叫伺服器端游標。通過伺服器端游標,伺服器使用由伺服器計算機所提供的資源來管理結果集。伺服器端游標只通過網路返回所請求的資料。該型別的游標有時可以提供比客戶端游標更好的效能,尤其是存在過度擁擠的網路通訊問題時。但必須指出的是,對於每個活動客戶端來說,伺服器端游標很容易耗費寶貴的伺服器資源(至少目前是這樣)。因此,必須相應地進行計畫,確保伺服器硬體能夠管理活動客戶端所請求的所有伺服器端游標。另外,伺服器端游標速度緩慢,因為它只提供單行訪問,就是說,沒有批游標可用。當插入、更新或刪除記錄時,伺服器端游標是有用的。使用伺服器端游標,在同乙個連線上就可以有多個活動語句。
這幾天做進行資料庫操作時發現直接連線開啟時,資料集非空時getrecordcount返回-1,最後發現原來是預設的動態游標問題,recordset 物件的游標型別會影響是否能夠確定記錄的數目。對僅向前游標,recordcount 屬性將返回 -1,對靜態或鍵集游標返回實際計數,對動態游標取決於資料來源返回 -1 或實際計數。
只需要設定一下:m_conn
->
cursorlocation
=aduseclient;隨後呼叫就出現實際的值。
引用 關於VC中DLL程式設計
引用 casablanca 的 關於vc中dll程式設計 關於vc中dll程式設計 在我們實際用軟體時,經常可看到許多動態連線庫。動態連線庫有其自身的優點 如節省記憶體 支援多語種等功能,而且,當dll中的函式改變後,只要不是引數的改變 呼叫起的函式並不需要重新編譯。這在程式設計時十分有用。至於其他...
關於VC 中靜態庫的呼叫
關於vc 中靜態庫的呼叫 這個靜態庫是通過 通過生成嚮導選擇win32 static library建立的。在這個庫的生成嚮導中有兩個選項 pre compiled header 是在生成的工程中新增 stdafx.h 預編譯標頭檔案 mfc support 是在生成的工程中新增對mfc的支援,也就...
關於VC中的DLL的程式設計
dll的程式設計 關於vc中的dll的程式設計 發信人 dragon 龍 信區 vc 標 題 關於vc中的dll的程式設計 2 前面講到non mfc dll的編法,現在講講呼叫dll的方法。對dll的 呼叫分為兩種,一種是顯式的呼叫,一種是隱式的呼叫。所謂顯式的呼叫,是指在應用程式中用loadli...