职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1567|回复: 0

在JS中使用RecordSet对象的GetRows方法

[复制链接]
木头爱小猪 发表于 2007-8-14 10:58 | 显示全部楼层 |阅读模式
写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 webjx.com
'' http://www.webjx.com/
'' 定义变量
Dim conn,rs,data,recN,i
'' 连接数据库
Set conn=Server.CreateObject(\"ADODB.Connection\")
conn.Open \"rovider=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
&#39;&#39; 关闭数据库连接,释放对象
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 webjx.com
// http://www.webjx.com/
// 定义变量
var conn,rs,vdata,data,recN,i;
// 连接数据库
conn=Server.CreateObject(\"ADODB.Connection\");
conn.Open(\"rovider=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[0]+\", First: \"+data[1]+
    \", Second: \"+data[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=new Array();
    sp=i*fieldslen;
    for(var j=0;j<fieldslen;j++)
      data[j]=arr[sp+j];
  }
  return data;
}
</script>对于一些更新频率不高,而使用次数比较多的数据,可以在成功获取数据数组之后,用Application对象来缓存起来,从而减少对数据库的查询次数,一定程序程度上优化ASP的性能。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-5 18:05 , Processed in 0.100527 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表