写ASP措施时,一般环境老是利用的VBScript,不外也不可是这一种选择,也可以用JScript。但在用JScript作为ASP的语言时,比用VBScript有一些小小的不利便,好比RecordSet的GetRows要领。
在ASP中操纵数据库,一般都要用到RecordSet工具,假如注重措施效率的话,大概就会用到RecordSet工具的GetRows要领,把记录集工具转换成数组,而操纵数组在速度大将比用RecordSet工具的MoveNext要领快许多,并且可以在取出数组后尽早释放RecordSet工具,从而淘汰资源的占用,这也是优化ASP机能的一个要领。
在VBScript里,用RecordSet.GetRows要领取到的是一个二维数组,内里的数据可以通过遍历数组的方法来取得。
假设此刻有一个数据库,个中有一个表名为mytable,有3个字段,名称别离为id,first,second。
复制代码 代码如下:
' code by xujiwei
'
' 界说变量
Dim conn,rs,data,recN,i
' 毗连数据库
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_
Server.MapPath("data.mdb")
' 获取记录集
Set rs=conn.Execute("SELECT id,first,second FROM mytable")
' 获取数据数组
data=rs.GetRows()
' 封锁记录集,释放工具
rs.Close()
Set rs=Nothing
' 获取记录数
recN=UBound(data,2)
' 轮回输出数据
For i=0 To recN
' 留意,数组下标从0开始
' 显示数据库中数据
Response.Write("ID: "&data(0,i)&", First: "&data(1,i)&_
", Second: "&data(2,i)&"<br />")
Next
' 封锁数据库毗连,释放工具
conn.Close()
Set conn=Nothing
%>
可是在JScript利用时,就会有一个问题,那就是JScript并没有二维数组,假如要用GetRows所获取的数据,须要将这个VBScript中的二维数组转换成JScript能识此外数组,即元素为数组的一个一维数组。
在JScript里,用GetRows要领获取的数组有一个toArray要领,可以转换成JScript中能用的数组,可是这个数组是一维的,也就是说,假如要像在VBScript一样利用的话,还需要我们本身来做转换。
查阅了MSDN及在网上搜索了相关的文章之后,我写了一个数组转换的函数用于在JScript中利用GetRows要领。
复制代码 代码如下:
<script language="JScript" runat="server">
// code by xujiwei
//
// 界说变量
var conn,rs,vdata,data,recN,i;
// 毗连数据库
conn=Server.CreateObject("ADODB.Connection");
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
Server.MapPath("data.mdb"));
// 获取记录集
rs=conn.Execute("SELECT id,first,second FROM test");
// 获取数据数组,并转换成为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;
// 数组转换函数
// by xujiwei
// 参数:arr - GetRows要领获得的工具用toArray要领获得的数组
// fieldslen - 数据表字段数
function transArray(arr,fieldslen) {
var len=arr.length/fieldslen,data=[],sp;
for(var i=0;i<len;i++) {
data[i]=new Array();
sp=i*fieldslen;
for(var j=0;j<fieldslen;j++)
data[i][j]=arr[sp+j];
}
return data;
}
</script>
对付一些更新频率不高,而利用次数较量多的数据,可以在乐成获取数据数组之后,用Application工具来缓存起来,从而淘汰对数据库的查询次数,必然措施水平上优化ASP的机能。
转地点:?id=717
您大概感乐趣的文章: