심재운 블로그

ASP - GetRows() 함수로 Recordset (레코드셋) 데이터 가져와서 출력하기




Classic ASP/VBScript - Getting away from Recordsets, use GetRows()


GetRows () 의 2 차원 배열을 사용하는 것이 왜 훨씬 좋은지 자세히 설명하지는 않겠지만,  GetRows ()를 사용하는 것이 훨씬 효율적이라는 것입니다. 

아래는 전형적인 레코드셋을 이용하여 가져오는 방법 입니다. 


strSQL = "SELECT ID, Name FROM users;"
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open strSQL, Conn ' 1 call to database
If Not RS.EOF Then ' 1 call to database
    While Not RS.EOF ' n + 1 calls to database
        ID = RS("ID") ' n calls to database
        Name = RS("Name") ' n calls to database
        Response.Write("<p>" & Name & " (" & ID & ")</p>" & vbCrLf)
        RS.MoveNext() ' n calls to database
    Wend
End If
RS.Close()
Set RS = Nothing 


아래 코드는 위와 동일한 결과값을 주긴 하지만, 더 빠르고, 효율적인 속도를 제공해 줍니다.


strSQL = "SELECT ID, Name FROM users;"
Set objRS = Conn.Execute(strSQL) ' 1 call here
If Not objRS.EOF Then arrRS = objRS.GetRows() ' 2 calls here
Set objRS = Nothing
If IsArray(arrRS) Then
    For i = LBound(arrRS, 2) To UBound(arrRS, 2)
        ID = arrRS(0, i)
        Name = arrRS(1, i)
        Response.Write("<p>" & Name & " (" & ID & ")</p>" & vbCrLf)
    Next
    Erase arrRS
End If 

위의 코드를 더 짧게하기 위해, 아래 코드는 재활용을 하기 위해서 function 함수를 사용했습니다.

Function GetRSArray(strSQL)
    Set objRS = Conn.Execute(strSQL)
    If Not objRS.EOF Then arrRS = objRS.GetRows()
    Set objRS = Nothing
    GetRSArray = arrRS
End Function
 
arrRS = GetRSArray("SELECT ID, Name FROM users;")
 
If IsArray(arrRS) Then
    For i = LBound(arrRS, 2) To UBound(arrRS, 2)
        ID = arrRS(0, i)
        Name = arrRS(1, i)
        Response.Write("<p>" & Name & " (" & ID & ")</p>" & vbCrLf)
    Next
    Erase arrRS
End If 



이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드

  1. wer
    배열로 넘겼을땐 속도는 빠르겠지만 연관배열이 아니기에 가독성이 열배는 떨어지네요 디버그할때 참 골치아플듯
    2011.04.06 11:10
  2. hope20603@naver.com
    컬럼 수가 몇개 안될때 사용하면 좋을 것 같네요 ㅎㅎ
    ID = arrRS(0, i) ' 컬럼명
    이렇게 주석 처리해두면 어느정도 사용할 만 한거 같슴돠
    2016.11.10 14:49
    • 네 ㅎㅎㅎ 가독성이 힘들지만 그래도 속도면에선 좋아요 ㅎㅎ
      2016.11.29 23:04 신고
  3. 비밀댓글입니다
    2017.04.28 14:54
1 2 3 4 5 6 7 8