CAFE

ASP Q/A

[답변]Re:GetRows() 를 이해를 잘...

작성자좋은하루...*^.^*|작성시간04.10.01|조회수1,841 목록 댓글 1
getrows() 메서드는 배열 형태로 레코드 셋의 값을 반환하는 메서드입니다.

흔히 set rs = server.createobject("ADODB.RecordSet")과 같이 레코드 셋을 생성하여 rs라는 레코드셋 객체에 DB 테이블의 값을 받고, 이를 asp 코딩으로 루프돌려 화면에 값을 뿌려주는 식의 코딩을 많이 하죠...

이렇게 되면 모든 값이 화면에 뿌려지는 동안 레코드셋이 연결되어 있어야 하므로 디비에 조금 더 부담을 준다는 말들을 하곤 합니다.

그래서 조금이라도 디비와의 연결을 빨리 끊되, 필요한 값을 받을 수 있는 방법으로는 getString() 이라는 메서드와 getRows()라는 메서드를 사용합니다.

두 가지 메서드가 조금의 차이는 있습니다.

getString()은 해당 레코드들의 모든 필드를 string 형식으로 모두 받아와서
레코드 별로 나누고, 나누어진 각각의 레코드에서 컬럼의 값들을 나누어서 사용해야 하는 다소 복잡할 수 있는 방법입니다.
레코드들은 chr(13)-enter-으로 구분되며, 각 컬럼의 값들은 chr(9)-tab-로 구분되므로 이를 구분자로 사용하면 됩니다.

getRows() 메서드는 각각의 레코드별로 배열로 나뉘어 가져옵니다.
말 그대로 레코드와 컬럼을 이중배열로 나누어 가져오는 것입니다.
따라서 각 배열을 그대로 사용하면 됩니다.

두 가지 방법 모두 값을 받아와서 바로 rs를 초기화하고, 디비와의 연결을 종료한 후 원하는 부분에서 받아온 값을 이용할 수 있습니다.

이들을 사용하는 것이 과연 월등히 좋은가에 대해서는 여러 의견이 있습니다.

단 페이징을 하실 경우 getString()이 더욱 복잡한 처리가 필요합니다.


다음은 getRows()의 예입니다...

-- 레코드 셋 객체 생성
set rs = server.createobject("adodb.recordset")

-- 쿼리문 실행, 레코드셋
sql = "select a, b, c from table tb where index < 11"
rs.open sql, Dbconn


-- 레코드 셋 값들을 allList 배열에 담는다.
AllList = rs.getrows()


-- allList의 값들을 레코드 단위로 나눈 갯수(레코드 수)를 구한다.
-- 1은 1차원 생략할 경우 기본 1, 2는 2차원 배열을 의미한다.
-- 여기서 2차원 배열 크기는 레코드 수를 의미한다.
cnt = UBound(AllList,2)

-- 레코드셋 객체를 반환, 디비연결 종료한다.
rs.close
set rs = nothing

Dbconn.close
set Dbconn = nothing


-- 필요한 곳에서 배열의 값들을 화면에 보여준다.
-- allList(컬럼, 레코드) 형태로 값을 활용한다.
-- allList(0, 0) allList(1,0) 은 첫번째 레코드의 첫번째, 두번째 컬럼 값을 의미한다.
-- 모든 레코드 값을 화면 출력하기 위해 레코드 수 만큼 루프돌며 컬럼값을 출력한다.
for i = 0 to Cnt
response.write AllList(0,i) & ", "
response.write AllList(1,i) & ", "
response.write AllList(2,i) & "<br>"
next

이상입니다.

설명이 좀 어려웠나요?
다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자freedman79 | 작성시간 04.10.01 감사합니다... 잘알아 들었습니다...
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼