3

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

4

2 回答 2

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

于 2009-08-07T12:14:57.737 回答
2

就我个人而言,我会简单地使用rs.getRows()并导航到数组中......您不仅确定您再也不会访问数据库,您每次使用它时都会看到性能的巨大提升

于 2009-08-25T20:52:46.673 回答