我在ASP页面中有一个查询。在某些条件之后,我必须在3个不同的表格中打印出我所记录的记录集。因此,为了避免扩展3次几乎相同的查询,我决定在记录集中搜索我需要的结果...所以我需要做两次RS.MoveFirst。 但是......当我用SQL Profiler分析时,我看到MoveFirst操作重新执行了我的查询......正是我想要避免的。 如何缓存结果并仅在记录集中移动?
答案 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()
并导航到数组......不仅你确定你再也没有打过数据库,每次使用它都会看到巨大的性能提升