<%
' 데이터베이스 오픈
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 myArray
myArray = 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="&nbsp;"
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='1cellspacing='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
%>

'asp' 카테고리의 다른 글

Asc Function  (0) 2009.12.10
VBScript!!!와 ASP의 오류처리  (0) 2009.11.27
다중셀렉트 값넘기기  (0) 2009.11.25
ASP 클래스 사용법  (0) 2009.11.18
ASP 클래스  (0) 2009.11.18

+ Recent posts