2014-10-06 50 views
2

我有一個存儲過程的一個非常基本的執行在我的代碼:ADODB記錄的RecordCount不返回有用的信息

Dim objCmd As ADODB.Command 
Dim objConn As ADODB.Connection 
Dim rsTemplate As ADODB.Recordset 

Set objConn = New ADODB.Connection 
objConn.Open strConnection 
Set objCmd = New ADODB.Command 
objCmd.ActiveConnection = objConn 
objCmd.CommandType = adCmdStoredProc 
objCmd.CommandText = "GetTemplate" 
objCmd.Parameters.Append objCmd.CreateParameter("@Param1", adInteger, adParamInput, , lngParam1) 
objCmd.Parameters.Append objCmd.CreateParameter("@Param2", adInteger, adParamInput, , lngParam1) 
objCmd.CommandTimeout = 600 
Set rsTemplate = objCmd.Execute() 
LogInfo "Found " & rsTemplate.RecordCount & " templates" 

的SP應該找到一個單行。問題是,有時它沒有罰款,這實際上是可以的,只是在兩種情況下RecordCount屬性都是-1。我會期望0記錄爲零,1記錄爲1。我有另一段代碼,可以返回一個或多個行,並與我的測試參數,它返回七行,RecordCount正確顯示7.有誰知道爲什麼我得到不一致的結果?如果我在這裏得到零結果,我需要能夠跳過後面的一段代碼,除了試圖訪問一個壞的RecordSet對象並且有一個特殊的處理程序到resume next,如果它是一個特定的錯誤代碼,沒有其他好方法來檢查。

回答

4

如果你的strConnection是這樣的,你只是指定一個只進遊標,那麼記錄數將始終爲-1,因爲結果大小不能用這種連接來標識。

從這裏http://msdn.microsoft.com/de-de/library/windows/desktop/ms676701(v=vs.85).aspx

的記錄對象的光標類型會影響是否能夠確定的 記錄數。 RecordCount屬性將返回-1爲 一個只進遊標;靜態或鍵集遊標的實際計數; 以及-1或動態遊標的實際計數,具體取決於數據源 。

+0

嗯,我會。我爲兩者使用了相同的連接字符串,但在嘗試解決另一個問題時,我在第二種情況下添加了「objConn.CursorLocation = adUseClient」這一行。將在幾分鐘內接受。謝謝! – 2014-10-06 16:03:03

0

暗淡FindRecordCount作爲整數

如果rsTemplate.EOF然後 FindRecordCount = 0 否則 rsTemplate.MoveLast FindRecordCount = rstRecords.AbsolutePosition 結束如果

也許你可以嘗試這樣的事情

+0

是的,這可能會起作用,但我很高興讓'RecordCount'本身正常工作。 – 2014-10-06 16:10:45

+0

我認爲它按預期工作。再次「-1,當ADO無法確定記錄的數量或提供者或遊標類型不支持RecordCount時」。只需創建一個替換recordCount的函數。 – trixrabbit 2014-10-06 16:14:10

+0

那麼我的代碼工作添加我在其他答案的評論中提到的行。 – 2014-10-06 16:15:16

1

確保在存儲過程GetTemplate中啓用了行計數。

例子:

CREATE procedure [dbo].[GetTemplate] 
AS 
BEGIN 
    SET NOCOUNT OFF -- Enable row count here 
    ... 

END 
+0

你有什麼理由不加入'SET NOCOUNT OFF'這行嗎?它會產生問題嗎?只是想知道爲什麼它不是默認設置。 – 2014-10-06 16:17:46

+1

啓用'no count'會更快更高效(特別是如果您運行查詢數千次,並且不關心受影響的行數)。但是如果您關心結果,那麼你需要將'no count'設置爲關閉。 – 2014-10-06 16:20:52

+0

嗯,我能夠在存儲過程中不包括該行的情況下獲得記錄數。 – 2014-10-06 16:30:01

相關問題