[ASP]使用RecordSet对象的GetRows方法(返回而为数组)和RS.MaxRecords(指定记录集的最大容量)

写ASP程序时,一般情况总是使用的VBScript,不过也不只是这一种选择,也可以用JScript。但在用JScript作为ASP的语言时,比用VBScript有一些小小的不方便,比如RecordSet的GetRows方法。

在ASP中操作数据库,一般都要用到RecordSet对象,如果注重程序效率的话,可能就会用到RecordSet对象的GetRows方法,把记录集对象转换成数组,而操作数组在速度上将比用RecordSet对象的MoveNext方法快很多,而且可以在取出数组后尽早释放RecordSet对象,从而减少资源的占用,这也是优化ASP性能的一个方法。

在VBScript里,用RecordSet.GetRows方法取到的是一个二维数组,里面的数据可以通过遍历数组的方式来取得。

假设现在有一个数据库,其中有一个表名为mytable,有3个字段,名称分别为id,first,second。

程序代码:
  1. '' code by xujiwei
  2. ''
  3. '' 定义变量
  4. Dim conn,rs,data,recN,i
  5. '' 连接数据库
  6. Set conn=Server.CreateObject("ADODB.Connection")
  7. conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_
  8.        Server.MapPath("data.mdb")
  9. '' 获取记录集
  10. Set rs=conn.Execute("SELECT id,first,second FROM mytable")
  11. '' 获取数据数组
  12. data=rs.GetRows()
  13. '' 关闭记录集,释放对象
  14. rs.Close()
  15. Set rs=Nothing
  16. '' 获取记录数
  17. recN=UBound(data,2)
  18. '' 循环输出数据
  19. For i=0 To recN
  20.        '' 注意,数组下标从0开始
  21.        '' 显示数据库中数据
  22.        Response.Write("ID: "&data(0,i)&", First: "&data(1,i)&_
  23.            ", Second: "&data(2,i)&"<br />")
  24. Next
  25. '' 关闭数据库连接,释放对象
  26. conn.Close()
  27. Set conn=Nothing
  28. %>

但是在JScript使用时,就会有一个问题,那就是JScript并没有二维数组,如果要用GetRows所获取的数据,必要将这个VBScript中的二维数组转换成JScript能识别的数组,即元素为数组的一个一维数组。

在JScript里,用GetRows方法获取的数组有一个toArray方法,可以转换成JScript中能用的数组,但是这个数组是一维的,也就是说,如果要像在VBScript一样使用的话,还需要我们自己来做转换。

查阅了MSDN及在网上搜索了相关的文章之后,我写了一个数组转换的函数用于在JScript中使用GetRows方法。

程序代码:
  1. <script language="JScript" runat="server">
  2. // code by xujiwei
  3. //
  4. // 定义变量
  5. var conn,rs,vdata,data,recN,i;
  6. // 连接数据库
  7. conn=Server.CreateObject("ADODB.Connection");
  8. conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
  9.        Server.MapPath("data.mdb"));
  10. // 获取记录集
  11. rs=conn.Execute("SELECT id,first,second FROM test");
  12. // 获取数据数组,并转换成为JScript中可用的数组类型
  13. vdata=rs.GetRows().toArray();
  14. // 获取数据表的字段数
  15. i=rs.Fields.Count;
  16. // 关闭记录集,释放对象
  17. rs.Close();
  18. rs=null;
  19. // 转换数组
  20. data=transArray(vdata,i);
  21. // 获取记录数
  22. recN=data.length;
  23. // 循环输出数据
  24. for(i=0;i<recN;i++) {
  25.        // 注意,数组下标从0开始
  26.        // 显示数据库中数据
  27.        Response.Write("ID: "+data[i][0]+", First: "+data[i][1]+
  28.            ", Second: "+data[i][2]+"<br />");
  29. }
  30. // 关闭数据库连接,释放对象
  31. conn.Close();
  32. conn=null;
  33. // 数组转换函数
  34. // by xujiwei
  35. // 参数:arr - GetRows方法得到的对象用toArray方法得到的数组
  36. //          fieldslen - 数据表字段数
  37. function transArray(arr,fieldslen) {
  38.        var len=arr.length/fieldslen,data=[],sp;
  39.        for(var i=0;i<len;i++) {
  40.            data[i]=new Array();
  41.            sp=i*fieldslen;
  42.            for(var j=0;j<fieldslen;j++)
  43.                data[i][j]=arr[sp+j];
  44.        }
  45.        return data;
  46. }
  47. </script>

对于一些更新频率不高,而使用次数比较多的数据,可以在成功获取数据数组之后,用Application对象来缓存起来,从而减少对数据库的查询次数,一定程序程度上优化ASP的性能

 

RS.MaxRecords指定记录集的最大容量

假设你想显示在你站点上发布的最后10条信息,但是不能超过10条信息。或者你想显示3个连接,但是不超过3个。如何能够限制取到一个记录集中的记录数?记录集对象有一个属性用于此目的。通过使用MaxRecords属性,你可以限制从一个数据库查询返回到一个记录集中的记录数目。如下例所示:

 

<%

Set MyConn=Sever.CreateObject(ADODB.Connection)ADODB.RecordSet)FILEDSN=d:/Program Files/SELECT MyColumn FROM Mytable,MyConn<BR>&RS(MyColumn))

Set RS=Sever.CreateObject(

MyConn.Open

Common Files/ODBC/Data Sources/MyData.dsn

RS.MaxRecords=10

RS.Open

WHILE NOT RS.EOF

Response.Write(

RS.MoveNext

WEND

RS.CloseMy

Conn.Close%>在这个脚本中,MaxRecords属性被设为10。当记录集RS被打开时,不会有超过10个记录被取到RS中。即使表中有10,000条记录,也只有10条记录被取出。使用MaxRecords属性时,你必须在打开记录集之前设置该属性值。记录集打开之后,该属性将成为只读的。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值