ASP 프로그램을 작성할 때 일반적으로 VBScript가 사용되지만 JScript도 사용할 수 있는 유일한 옵션은 아닙니다. 하지만 JScript를 ASP의 언어로 사용하는 경우 RecordSet의 GetRows 메서드 등 VBScript를 사용하는 경우에 비해 약간의 불편함이 있습니다.
ASP에서 데이터베이스를 운영할 때는 일반적으로 RecordSet 개체를 사용합니다. 프로그램 효율성을 중시한다면 RecordSet 개체의 GetRows 메서드를 사용하여 레코드 집합 개체를 배열로 변환하는 것이 더 빠릅니다. RecordSet 개체를 사용하면 훨씬 더 빠르며 배열을 꺼낸 후 가능한 한 빨리 RecordSet 개체를 해제할 수 있어 리소스 사용량을 줄일 수 있습니다. 이는 ASP 성능을 최적화하는 방법이기도 합니다.
VBScript에서는 RecordSet.GetRows 메소드를 이용하여 얻어지는 것이 2차원 배열이고, 배열을 순회함으로써 그 안의 데이터를 얻을 수 있습니다.
mytable이라는 테이블과 id, first, second라는 세 개의 필드가 있는 데이터베이스가 있다고 가정합니다.
다음과 같이 코드 코드를 복사합니다.
'코드바이수지웨이
'http://www.xujiwei.cn/
'변수 정의
Dimconn,rs,데이터,recN,i
'데이터베이스에 연결
Setconn=Server.CreateObject(ADODB.Connection)
conn.OpenProvider=Microsoft.Jet.OLEDB.4.0;데이터 소스=&_
서버.MapPath(data.mdb)
'레코드세트를 가져오세요
Setrs=conn.Execute(SELECTid,first,secondFROMmytable)
'데이터 배열을 가져옵니다
데이터=rs.GetRows()
'레코드세트를 닫고 객체를 해제합니다.
RS.닫기()
설정자=아무것도 없음
'레코드 수를 가져옵니다
RecN=UBound(데이터,2)
'루프 출력 데이터
Fori=0TorecN
'배열 첨자는 0부터 시작한다는 점에 유의하세요.
'데이터베이스의 데이터 표시
Response.Write(ID:&data(0,i)&,First:&data(1,i)&_
,두 번째:&데이터(2,i)&<br/>)
다음
'데이터베이스 연결을 닫고 개체를 해제합니다.
연결.닫기()
Setconn=아무것도 없음
%>
하지만 JScript를 사용하게 되면 JScript에는 2차원 배열이 없다는 문제가 발생하게 됩니다. GetRows로 얻은 데이터를 사용하려면 VBScript의 2차원 배열을 JScript가 사용하는 배열로 변환해야 합니다. 즉, 요소는 배열의 1차원 배열입니다.
JScript에서는 GetRows 메서드를 사용하여 얻은 배열에 toArray 메서드가 있는데, 이를 JScript에서 사용할 수 있는 배열로 변환할 수 있습니다. 그러나 이 배열은 1차원이므로 VBScript에서처럼 사용하려는 경우에는 의미가 없습니다. , 변환을 수행하려면 여전히 직접 수행해야 합니다.
MSDN을 참조하고 인터넷에서 관련 기사를 검색한 후 JScript에서 GetRows 메서드를 사용하기 위한 배열 변환 함수를 작성했습니다.
다음과 같이 코드 코드를 복사합니다.
<script언어=JScriptrunat=서버>
//codebyxujiwei
//http://www.xujiwei.cn/
//변수 정의
varconn,rs,vdata,데이터,recN,i;
//데이터베이스에 연결
conn=Server.CreateObject(ADODB.Connection);
conn.Open(공급자=Microsoft.Jet.OLEDB.4.0;데이터소스=+
Server.MapPath(data.mdb));
//레코드 세트를 가져옵니다.
rs=conn.Execute(SELECTid,first,secondFROMtest);
//데이터 배열을 가져와 JScript에서 사용할 수 있는 배열 유형으로 변환합니다.
vdata=rs.GetRows().toArray();
//데이터 테이블의 필드 수를 가져옵니다.
i=rs.Fields.Count;
//레코드세트를 닫고 객체를 해제합니다.
rs.닫기();
RS=널;
//배열 변환
data=transArray(vdata,i);
//레코드 수를 가져옵니다.
RecN=데이터.길이;
//루프 출력 데이터
for(i=0;i<recN;i++){
//배열 첨자는 0부터 시작한다는 점에 유의하세요.
//데이터베이스의 데이터를 표시합니다.
Response.Write(ID:+data[i][0]+,First:+data[i][1]+
,두 번째:+데이터[i][2]+<br/>);
}
//데이터베이스 연결을 닫고 객체를 해제합니다.
conn.Close();
콘=널;
//배열 변환 함수
//byxujiwei
//매개변수: arr-GetRows 메서드로 얻은 객체와 toArray 메서드로 얻은 배열
//fieldslen-데이터 테이블의 필드 수
functiontransArray(arr,fieldslen){
varlen=arr.length/fieldslen,data=[],sp;
for(vari=0;i<len;i++){
데이터[i]=newArray();
sp=i*fieldslen;
for(varj=0;j<필드slen;j++)
데이터[i][j]=arr[sp+j];
}
반환 데이터;
}
</script>
자주 업데이트되지는 않지만 자주 사용되는 일부 데이터의 경우 데이터 배열을 성공적으로 얻은 후 Application 개체를 사용하여 캐시할 수 있습니다. 이를 통해 데이터베이스에 대한 쿼리 수를 줄이고 ASP 성능을 어느 정도 최적화할 수 있습니다.