程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> RecordCount=-1解決方案

RecordCount=-1解決方案

編輯:ASP技巧

現象

當在服務器端請求RecordCoun時會返回-1。這是因為ActiveX Data Objects (ADO) 2.0中的CursorType是adOpenForwardonly或者adOpenDynamic。

如果是ADO 1.5,只發生在cursortype是adOpenForwardonly的時候。如果使用OLEDB provider for JET和SQL Server產生的結果可能不同,這依賴於數據庫的提供者。 

提供者可能不支持某些CursorTypes。當你選擇的CursorType不被支持時,提供者將選擇最接近於你所請求的CursorType。請參考你的提供者的文檔。此外,請注意不是所有的LockType和CursorType的組合都可以同時工作。改變LockType將強制改變CursorType。請確定使用調試來檢查CursorType的值。 

原因 

在動態的游標中紀錄號可能改變。Forwardonly的游標無法返回RecordCount。

解決辦法 

使用adOpenKeyset(=1)或者adOpenStatic(=3)作為服務器端游標或者客戶端游標。客戶端只使用adOpenStatic作為CursorTypes,而不管你選擇什麼樣的CursorType。 

狀態

這個形式是設計決定的。

==============================
鏈接文檔幫助理解解決

有關rs.open sql,1,1中“1”和另外一個“1”的解釋

rs.open sql,1,1也可以寫成

1 rs.CursorType = 1 2 rs.LockType = 1 3 rs.open sql(鼠標移到代碼上去,在代碼的頂部會出現四個圖標,第一個是查看源代碼,第二個是復制代碼,第三個是打印代碼,第四個是幫助)

其中CursorType代表從一個表或者一個SQL查詢結果返回的記錄。

這個參數有四個值分別是:

adOpenForwardOnly(=0)
表示只允許在記錄集內的記錄間往前移動。這個是缺省值。(只讀,且當前數據記錄只能向下移動)

adOpenKeyset(=1)
反映由其它用戶所做的對記錄的改變或者刪除動作,但並不反映由其它用戶做作的添加新記錄的動作。(只讀,當前數據記錄可自由移動)

adOpenDynamic(=2) 
反映由其它用戶所做的對記錄的改變或者刪除動作,包括添加的新記錄。(可讀寫,當前數據記錄可自由移動)

adOpenStatic(=3)
不反映其它用戶對記錄所做的修改,添加,刪除動作。(可讀寫,當前數據記錄可自由移動,可看到新增記錄)

lockType 表示當打開記錄集時,數據提供者用於鎖定數據庫的類型:

adLockReadOnly(=1)
數據不能改變,缺省鎖定類型,記錄集是只讀的,不能修改記錄

adLockPessimistic(=2)
悲觀鎖定,當修改記錄時,數據提供者將嘗試鎖定記錄以確保成功地編輯記錄。只要編輯一開始,則立即鎖住記錄。(數據提供者在開始編輯數據的時候鎖定記錄)

adLockOptimistic(=3)
樂觀鎖定 ,直到用Update方法提交更新記錄時才鎖定記錄。(僅當調用update方法時,數據提供者鎖定記錄)

adLockBatchOptimistic(=4)
批量樂觀鎖定,允許修改多個記錄,只有調用UpdateBatch方法後才鎖定記錄。(用於批處理修改)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved