如何避免在MoveFirst上重新执行查询

问题描述:

我在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

使用断开连接的记录

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

我个人简单地使用rs.getRows()并导航到阵列中......不仅是U确保你永远再次命中数据库,你应该看你用它