2010-11-29 4 views
3

최근에 나는 매우 이상한 problem을 가졌다. 응용 프로그램은 클래식 ASP로 작성되어 있지만 ADO/OLEDB를 사용하는 모든 연결에서 같은 경우입니다.ADODB 이상한 행동

이들은 연결 매개 변수입니다. 짧은이 코드에서

conn=Server.CreateObject("ADODB.Connection"); 
conn.Provider="Microsoft.Jet.OLEDB.4.0"; 
conn.Open("D:/db/testingDb.mdb"); 

: BigQuery의 행보다 특정 이상의 수를 반환하는 경우

conn.Open("myconnection"); 
bigQuery = "..."; 
rs = conn.execute(bigQuery); 
while (!rs.eof) { 
    ... 
    smallQuery = "..." 
    rssmall = conn.execute(smallQuery); 
    ... 
    rssmall.close(); 
    ... 
    rs.movenext(); 
} 
rs.close(); 
conn.close(); 

이 (내 경우에는 ~ 20) 작동하지 않습니다. 하지만 제안 stealthyninja 같은 내부 루프에 대한 또 하나 개의 연결을 사용하는 경우 :

conn.Open("myconnection"); 
conn2.Open("myconnection") 

bigQuery = "..."; 
rs = conn.execute(bigQuery); 
while (!rs.eof) { 
    ... 
    smallQuery = "..." 
    rssmall = conn2.execute(smallQuery); 
    ... 
    rssmall.close(); 
    ... 
    rs.movenext(); 
} 
rs.close(); 
conn2.close(); 
conn.close(); 

문제가 사라합니다.

중요한 경우 Access 데이터베이스와 IIS7을 사용하고 있습니다.

누구든지 이에 대한 논리적 설명이 있습니까?

+2

나는 그것에 대해 아무것도 찾을 수 없지만 내 _guess_ 열린 레코드 집합에 이미 연결된 연결을 다시 사용할 수 없다는 것입니다. 왜 약 20 개의 레코드에서 작동합니까? 아마도 캐싱. 다시 말하지만, 이것은 모두 추측입니다. 이 문제와 관련된 레코드 세트 또는 Connection 개체의 Execute 메서드에서 아무 것도 찾을 수 없습니다. –

답변

4

Michael Todd 님의 댓글이 있습니다. ADODB는 사용자가하려는 MARS (Multiple Active Result Sets)를 지원하지 않습니다. 20 레코드만으로 작동하는 이유는 이것이 클라이언트 측에 처음 전송되는 양 때문입니다. 이에

표준 용액

  1. 같이, 두 가지의 연결을 한 후, 먼저 유지 구조체 또는 캐시에 전체 외주 집합 검색을 처리하고 내부 쿼리를 실행하거나

  2. 사용되어 너는 시연했다.

+2

세 번째, 더 나은 선택은 두 쿼리를 결합하여 결합하는 것입니다. – erikkallen

+0

Heh. 좋은 지적 @erikkallen ... 나 자신의 petard로 호이스트! – RBarryYoung

+0

또는 단일 연결을 사용하고 연결이 끊긴 레코드 집합 사용 – RobV