寫ASP程式時,一般情況總是使用的VBScript,不過也不只是這個選擇,也可以用JScript。但用JScript當ASP的語言時,比用VBScript有一些小小的不方便,像是RecordSet的GetRows方法。
在ASP中操作資料庫,一般都要用到RecordSet對象,如果注重程序效率的話,可能就會用到RecordSet對象的GetRows方法,把記錄集對象轉換成數組,而操作數組在速度上將比用RecordSet對象的MoveNext方法快很多,而且可以在取出數組後儘早釋放RecordSet對象,從而減少資源的佔用,這也是優化ASP性能的一個方法。
在VBScript裡,用RecordSet.GetRows方法取到的是一個二維數組,裡面的資料可以透過遍歷數組的方式來取得。
假設現在有一個資料庫,其中有一個表名為mytable,有3個字段,名稱分別為id,first,second。
複製代碼代碼如下:
'codebyxujiwei
'http://www.xujiwei.cn/
'定義變數
Dimconn,rs,data,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)
'取得資料數組
data=rs.GetRows()
'關閉記錄集,釋放對象
rs.Close()
Setrs=Nothing
'取得記錄數
recN=UBound(data,2)
'循環輸出數據
Fori=0TorecN
'注意,數組下標從0開始
'顯示資料庫中數據
Response.Write(ID:&data(0,i)&,First:&data(1,i)&_
,Second:&data(2,i)&<br/>)
Next
'關閉資料庫連接,釋放對象
conn.Close()
Setconn=Nothing
%>
但是在JScript使用時,就會有一個問題,那就是JScript並沒有二維數組,如果要用GetRows所獲取的數據,必要將這個VBScript中的二維數組轉換成JScript能識別的數組,即元素為數組的一個一維數組。
在JScript裡,用GetRows方法取得的陣列有一個toArray方法,可以轉換成JScript中能用的數組,但是這個數組是一維的,也就是說,如果要像在VBScript一樣使用的話,還需要我們自己來做轉換。
查閱了MSDN及在網路上搜尋了相關的文章之後,我寫了一個陣列轉換的函數用於在JScript中使用GetRows方法。
複製代碼代碼如下:
<scriptlanguage=JScriptrunat=server>
//codebyxujiwei
//http://www.xujiwei.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,secondFROMtest);
//取得資料數組,並轉換成為JScript中可用的數組類型
vdata=rs.GetRows().toArray();
//取得資料表的欄位數
i=rs.Fields.Count;
//關閉記錄集,釋放對象
rs.Close();
rs=null;
//轉換數組
data=transArray(vdata,i);
//取得記錄數
recN=data.length;
//循環輸出數據
for(i=0;i<recN;i++){
//注意,陣列下標從0開始
//顯示資料庫中數據
Response.Write(ID:+data[i][0]+,First:+data[i][1]+
,Second:+data[i][2]+<br/>);
}
//關閉資料庫連接,釋放對象
conn.Close();
conn=null;
//數組轉換函數
//byxujiwei
//參數:arr-GetRows方法得到的物件用toArray方法得到的陣列
//fieldslen-資料表字段數
functiontransArray(arr,fieldslen){
varlen=arr.length/fieldslen,data=[],sp;
for(vari=0;i<len;i++){
data[i]=newArray();
sp=i*fieldslen;
for(varj=0;j<fieldslen;j++)
data[i][j]=arr[sp+j];
}
returndata;
}
</script>
對於一些更新頻率不高,而使用次數比較多的數據,可以在成功取得數據數組之後,用Application物件來快取起來,從而減少對資料庫的查詢次數,一定程序程度上優化ASP的效能。