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

时间:2009-08-07 11:11:58

标签: asp-classic vbscript recordset

我在ASP页面中有一个查询。在某些条件之后,我必须在3个不同的表格中打印出我所记录的记录集。因此,为了避免扩展3次几乎相同的查询,我决定在记录集中搜索我需要的结果...所以我需要做两次RS.MoveFirst。 但是......当我用SQL Profiler分析时,我看到MoveFirst操作重新执行了我的查询......正是我想要避免的。 如何缓存结果并仅在记录集中移动?

2 个答案:

答案 0 :(得分:3)

使用断开连接的记录集

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对象(不要试图使用字符串连接)。仍然原则是使用客户端光标位置和静态记录集然后分离并关闭连接。

答案 1 :(得分:2)

就个人而言,我只需使用rs.getRows()并导航到数组......不仅你确定你再也没有打过数据库,每次使用它都会看到巨大的性能提升