写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
' http://www.xujiwei.cn/
' 定义变量
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
// http://www.xujiwei.cn/
// 定义变量
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的性能。
转地址:http://www.xujiwei.cn/blog/?id=717
在ASP中操作数据库,一般都要用到RecordSet对象,如果注重程序效率的话,可能就会用到RecordSet对象的GetRows方法,把记录集对象转换成数组,而操作数组在速度上将比用RecordSet对象的MoveNext方法快很多,而且可以在取出数组后尽早释放RecordSet对象,从而减少资源的占用,这也是优化ASP性能的一个方法。
在VBScript里,用RecordSet.GetRows方法取到的是一个二维数组,里面的数据可以通过遍历数组的方式来取得。
假设现在有一个数据库,其中有一个表名为mytable,有3个字段,名称分别为id,first,second。
复制代码 代码如下:
' code by xujiwei
' http://www.xujiwei.cn/
' 定义变量
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
// http://www.xujiwei.cn/
// 定义变量
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的性能。
转地址:http://www.xujiwei.cn/blog/?id=717
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月23日
2024年11月23日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]