ASP プログラムを作成する場合、通常は VBScript が使用されますが、これが唯一のオプションではなく、JScript も使用できます。ただし、ASP の言語として JScript を使用する場合、RecordSet の GetRows メソッドなど、VBScript を使用する場合と比較して若干の不便な点がいくつかあります。
ASP でデータベースを操作する場合、プログラムの効率を重視する場合は、RecordSet オブジェクトの GetRows メソッドを使用して配列に変換する方が高速です。 RecordSet オブジェクトを使用すると、MoveNext メソッドがはるかに高速になり、配列を取り出した後できるだけ早く RecordSet オブジェクトを解放できるため、ASP のパフォーマンスを最適化することもできます。
VBScript では、RecordSet.GetRows メソッドを使用して取得されるのは 2 次元配列であり、配列をトラバースすることで内部のデータを取得できます。
mytable という名前のテーブルと、id、first、および Second という名前の 3 つのフィールドを持つデータベースがあるとします。
次のようにコードをコピーします。
'codebyxjiwei
'http://www.xjiwei.cn/
'変数を定義する
ディムコン、rs、データ、recN、i
'データベースに接続します
Setconn=Server.CreateObject(ADODB.Connection)
conn.OpenProvider=Microsoft.Jet.OLEDB.4.0;DataSource=&_
Server.MapPath(data.mdb)
'レコードセットを取得します
Setrs=conn.Execute(SELECTid,first,secondFROMmytable)
'データ配列を取得します
データ=rs.GetRows()
'レコードセットを閉じてオブジェクトを解放します
rs.Close()
Setrs=なし
'レコード数を取得する
recN=UBound(データ,2)
'ループ出力データ
Fori=0TorecN
'配列の添字は 0 から始まることに注意してください
'データベース内のデータを表示します
Response.Write(ID:&data(0,i)&,First:&data(1,i)&_
,2 番目:&data(2,i)&<br/>)
次
'データベース接続を閉じてオブジェクトを解放します
conn.Close()
Setconn=なし
%>
しかし、JScript を使用する場合、JScript には 2 次元配列がないという問題が発生します。GetRows で取得したデータを使用したい場合は、VBScript の 2 次元配列を JScript の配列に変換する必要があります。つまり、要素は配列の 1 次元配列であると認識できます。
JScript では、GetRows メソッドを使用して取得した配列には toArray メソッドがあり、これを JScript で使用できる配列に変換できます。ただし、この配列は 1 次元であるため、VBScript のように使用する必要があります。変換を行うには、やはり自分で行う必要があります。
MSDN を参照し、インターネット上の関連記事を検索した後、JScript で GetRows メソッドを使用するための配列変換関数を作成しました。
次のようにコードをコピーします。
<script language=JScriptrunat=server>
//コードビクスジウェイ
//http://www.xjiwei.cn/
//変数を定義する
varconn、rs、vdata、data、recN、i;
//データベースに接続する
conn=Server.CreateObject(ADODB.Connection);
conn.Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=+
Server.MapPath(data.mdb));
// レコードセットを取得します
rs=conn.Execute(SELECTid,first,firstFROMtest);
// データ配列を取得し、JScript で使用できる配列型に変換します。
vdata=rs.GetRows().toArray();
// データテーブル内のフィールドの数を取得します
i=rs.Fields.Count;
//レコードセットを閉じてオブジェクトを解放します
rs.Close();
rs=null;
//配列を変換する
データ=transArray(vdata,i);
//レコード数を取得する
recN=データ.長さ;
//出力データをループする
for(i=0;i<recN;i++){
//配列の添字は 0 から始まることに注意してください
//データベース内のデータを表示します
Response.Write(ID:+データ[i][0]+,最初:+データ[i][1]+
,秒:+データ[i][2]+<br/>);
}
//データベース接続を閉じてオブジェクトを解放します
conn.Close();
conn=null;
//配列変換関数
//ビシュジウェイ
//パラメータ: arr-GetRowsメソッドで取得したオブジェクトとtoArrayメソッドで取得した配列
//fieldslen - データテーブル内のフィールドの数
functiontransArray(arr,fieldslen){
varlen=arr.length/fieldslen,data=[],sp;
for(vari=0;i<len;i++){
データ[i]=newArray();
sp=i*フィールドレン;
for(varj=0;j<fieldslen;j++)
データ[i][j]=arr[sp+j];
}
データを返す;
}
</script>
頻繁には更新されないが頻繁に使用される一部のデータについては、データ配列の取得に成功した後に Application オブジェクトを使用してキャッシュすることができます。これにより、データベースへのクエリの数が削減され、ASP のパフォーマンスがある程度最適化されます。