Как избежать повторного выполнения запроса на MoveFirst - PullRequest
3 голосов
/ 07 августа 2009

У меня есть запрос на странице ASP. Набор записей, который я получаю, должен быть напечатан в 3 разных таблицах после некоторых условий. Поэтому, чтобы избежать трехкратного повторения почти одного и того же запроса, я решил поискать в наборе записей нужные мне результаты ... поэтому мне нужно сделать RS.MoveFirst два раза. Но ... когда я проанализировал с помощью SQL Profiler, я увидел, что операция MoveFirst повторно выполняет мой запрос ... именно то, чего я хотел избежать. Как я могу сделать кеш результатов и перемещать только набор записей?

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Использовать отключенный набор записей

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 между соединением и набором записей (не поддавайтесь искушению использовать конкатенацию строк). Тем не менее, принцип тот же: используйте расположение курсора клиента и статический набор записей, затем отсоедините и закройте соединение.

2 голосов
/ 26 августа 2009

лично я просто использовал бы rs.getRows() и переместился бы в массив ... не только вы уверены, что никогда больше не попадете в базу данных, вы должны видеть огромный прирост производительности при каждом ее использовании

...