duraboys
                 2009. 11. 25. 18:02
              
              
                            
        
        
                                
            
| 
 <%' 데이터베이스 오픈
 Do UNTIL rs.eof
 name=rs("name")
 address=rs("address")
 company=rs("company")
 rs.movenext
 '사용자게에 데이터를 보여주기 위한 처리...
 LOOP
 %>
 | 
만일 예를 들어, 3개의 컬럼에 700개의 레코드를 가지고 온다고 가정해 보자. 만일 그렇다면 아래 공식처럼 전체 3,500번의 데이터베이스 접근을 시도해야 한다.
| 
 + 2,100 ..... 각각의 필드를 읽을 때 마다 데이터베이스 요청 (700 * 3)+ 700    ..... 각각의 movenext 마다 1회씩 총 700회 요청
 + 700    ..... 각각의 eof 테스트마다 1회씩 총 700회 요청
 =======
 = 3,500
 | 
만일 가지고와야할 데이터가 많으면 많을 수록 더 많은 요청이 이루어질 것이고 그에 따른 성능 저하가 예상이 된다.
그렇다면 3,500번의 요청이 예상되는 위의 예를 단 한 번의 요청으로 같은 결과를 가지고 올 수 있을까? 있다. 바로 GetRows를 사용하는 것이다. 다음과 같은 방식으로 GetRows를 사용할 수 있다:
| 
 dim myArraymyArray = rs.GetRows
 | 
3개의 컬럼을 가진 700개의 레코드를 단 한 번에 배열로 저장시킬 수 있다. 이것은 데이터를 가지고 오기 위해 매번 데이터베이스와 통신을 하지 않아도 배열 메모리에 저장해 두고 그 데이터들을 사용할 수 있음을 의미한다. 심지어 데이터를 사용하기 전에 Recordset, Connection 객체 리소스를 반환해도 됨을 의미한다.
이제 실제 코드를 한 번 살펴보도록 하자.
| 
 <html><head><TITLE>GetRows를 사용한 예제</TITLE>
 </head>
 <body bgcolor="#FFFFFF">
 <%
 ' 자신의 환경에 맞는 데이터베이스 정보 입력
 myDSN="Provider=SQLOLEDB; Data Source=(local); Initial Catalog=pubs; User ID=sa; Password=1111"
 ' 자신에게 맞는 SQL문 설정
 mySQL="select * from authors"
 showblank=" "
 shownull="-null-"
 
 set conntemp=server.createobject("adodb.connection")
 conntemp.open myDSN
 set rstemp=conntemp.execute(mySQL)
 If  rstemp.eof then
 response.write "해당 데이터가 존재하지 않습니다!<br>"
 response.write "조회하신 SQL 문 : " & mySQL
 Call CloseAll
 response.end
 end if
 
 response.write "<table border='1' cellspacing='0' cellpadding='5' bordercolordark='white'bordercolorlight='black'><tr>" & vbcrlf
 '테이블 제목 표시
 for each whatever in rstemp.fields
 response.write "<td><b>" & whatever.name & "</B></TD>" & vbcrlf
 next
 response.write "</tr>" & vbcrlf
 
 ' 모든 레코드를 배열로 저장
 alldata=rstemp.getrows
 Call CloseAll
 
 numcols=ubound(alldata,1)
 numrows=ubound(alldata,2)
 FOR rowcounter= 0 TO numrows
 response.write "<tr>" & vbcrlf
 FOR colcounter=0 to numcols
 thisfield=alldata(colcounter,rowcounter)
 if isnull(thisfield) then
 thisfield=shownull
 end if
 if trim(thisfield)="" then
 thisfield=showblank
 end if
 response.write "<td valign=top>"
 response.write thisfield
 response.write "</td>" & vbcrlf
 NEXT
 response.write "</tr>" & vbcrlf
 NEXT
 response.write "</table>"
 %>
 </body></html>
 <%
 SUB CloseAll
 rstemp.close
 set rstemp=nothing
 conntemp.close
 set conntemp=nothing
 END SUB
 %>
 |