ASP 的 rs.RECORDCOUNT = -1

rs.RECORDCOUNT = -1 解決方法

在撰寫系統的時候不小心遇上了這個奇怪問題
SQL語法沒錯
而用rs.recordcount 卻得到 –1 這個數字
搜尋了網路後才得知
————————————————————————————-
當您要求 RecordCount 為 serverside 資料錄集, 可能會傳回 – 1。 就會發生這個問題與 ActiveX Data Objects (ADO) 2.0 含當 CursorType 為 adOpenForwardonly 或 adOpenDynamic) 以後版本。 只有當 cursortype 是 adOpenForwardonly 就會發生這個問題與 ADO 1.5。 使用 OLEDB 提供者適用於 JET 和 SQL Server 測試會產生不同結果, 視提供者。

提供者可能不支援某些 CursorTypes。 當您選擇不支援, CursorType CursorType 接近,哪些您要求應該選取提供者。 請參考您的提供者所附文件。 也請注意, 並非所有的 LockType 和 CursorType 組合在一起運作。變更 LockType 可能會強制 CursorType 中的變更。 請務必使用偵錯來檢查的 CursorType 值與您的 OLEDB 提供者進行測試時。

使用 adOpenKeysetadOpenStaticCursorType 針對伺服器端游標或使用用戶端資料指標。 CursorTypes 不管哪些 CursorType 您選取用戶端端資料指標用於只 adOpenStatic。
————————————————————————————-
其實解決方法只要把
rs.Open sqlcmd, db, 3, 1
後面兩個數字也可以寫成
rs.CursorType = 3
rs.LockType = 1

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

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

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

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

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

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

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

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

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

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

adLockBatchOptimistic(=4)
批量樂觀鎖定,允許修改多個記錄,只有調用UpdateBatch方法後才鎖定記錄。(用於批處理修改)

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: