2009-08-07 58 views
3

我在ASP頁面中查詢。在某些條件之後,我必須在3個不同的表中打印記錄集。所以,爲了避免將3次幾乎延伸到相同的查詢,我決定搜索記錄集以獲得所需的結果...所以我需要兩次創建一個RS.MoveFirst。 但是...當我用SQL Profiler分析時,我看到MoveFirst操作重新執行我的查詢......正是我想避免的。 如何緩存結果並只移動記錄集?如何避免在MoveFirst上重新執行查詢

+0

快照或動態數據集,性能每次一個巨大的收穫?是否使用了dbSeeChanges? – 2009-08-07 11:47:01

+0

forwardonly(默認) Obs:在查詢的第一次執行後,我不需要進行更改 – Roxana 2009-08-07 12:08:43

回答

2

使用斷開連接的記錄

Const adOpenStatic = 3 
Const adUseClient = 3 
Const adLockOptimistic = 3 

Dim conn: Set conn = Server.CreateObject("ADODB.Connection") 
conn.Open sYourConnectionString 

Dim rs : Set rs = Server.CreateObject("ADODB.Recordset") 
rs.CursorLocation = adUseClient 

rs.Open sYourSQL, conn, adOpenStatic, adLockOptimistic 

Set rs.ActiveConnection = Nothing 
conn.close 

'' // You can now roam around the recordset with .MoveFirst, .MoveNext etc without 
'' // incurring any further hits on the DB. 

需要注意的是,如果你有參數提供給您的SQL,你需要使用的連接和記錄之間的ADODB.Command對象(不要試圖使用字符串連接) 。仍然原則是相同的使用客戶端光標位置和靜態記錄集,然後分離和關閉連接。

+0

'''adOpenStatic = 3''' 使用靜態遊標。 **可用於查找數據或生成報告的一組記錄**的靜態副本。其他用戶的添加,更改或刪除不可見。 https://msdn.microsoft.com/en-us/library/ee252445(v=bts.10).aspx – 2018-01-04 16:15:41

1

我個人簡單地使用rs.getRows()並導航到陣列中......不僅是U確保你永遠再次命中數據庫,你應該看你用它