2009-08-07 7 views
3

ASP 페이지에 쿼리가 있습니다. 필자가 작성한 레코드 세트는 조건에 따라 3 개의 다른 테이블에 인쇄해야합니다. 따라서 거의 동일한 쿼리를 3 번 ​​실행하지 않기 위해 필자는 필요한 결과를 얻기 위해 레코드 집합을 검색하기로 결정 했으므로 RS.MoveFirst를 두 번 만들어야합니다. 하지만 ... SQL 프로파일 러를 사용하여 분석 할 때 MoveFirst 작업이 쿼리를 다시 실행하는 것을 보았습니다. 결과를 캐시하고 레코드 세트 만 이동할 수 있습니까?MoveFirst에서 쿼리를 다시 실행하지 않는 방법

+0

스냅 샷 또는 동적 데이터 세트 사용의 거대한 이득을 볼 수 데이터베이스를 다시 공격 결코 확신뿐만 아니라 ... rs.getRows()를 사용하여 배열로 이동 한 것? dbSeeChanges가 사용됩니까? –

+0

forwardonly (기본값) Obs : 쿼리를 처음 실행 한 후에 변경하지 않아도됩니다. – Roxana

답변

2

를 사용하여 연결이 끊긴 된 레코드 당신은 당신의 SQL에 공급하는 매개 변수를 가질 경우 연결 및 레코드 사이의 ADODB.Command 객체를 사용할 필요가 있음을

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. 

주 (문자열 연결을 사용하도록 유혹하지 않음) . 여전히 원리는 클라이언트 커서 위치와 정적 레코드 세트를 사용하여 동일한 연결을 분리하고 닫는 것입니다.

+0

'''adOpenStatic = 3''' 정적 커서를 사용합니다. ** 데이터를 찾거나 보고서를 생성하는 데 사용할 수있는 레코드 집합 **의 정적 복사본입니다. 다른 사용자의 추가, 변경 또는 삭제는 표시되지 않습니다. https://msdn.microsoft.com/en-us/library/ee252445(v=bts.10).aspx –

1

개인적으로 나는 단순히 u는 u는 성능 매번 당신이

관련 문제