在JScript中使用RecordSet对象的GetRows方法
作者:xujiwei 来源:HotHeart's BLOG 发布时间:2008-01-16 13:12:00
写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的性能。
版权声明:未作特别说明的内容可以转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。


猜你喜欢
- vue运行为v-on在监听键盘事件时,添加了特殊的键盘修饰符:<input v-on:keyup.13="submit&qu
- 很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询)。现在,就让我们
- 组件的基本使用注册组件注册组件就是利用Vue.component()方法,先传入一个自定义组件的名字,然后传入这个组件的配置。 Vue.co
- 最近的一个页面中碰到的,本来想用 border 来模拟设计图的虚线效果,但是很明显 border 效果不如设计图来的好看。顺便研究了下 da
- 目录1、为什么使用2、空结构体的特殊性3、使用场景3.1 实现方法接收者3.2 实现集合类型3.3 实现空通道前言:在 Go 语言中,有一个
- 本文实例为大家分享了python使用tornado实现简单爬虫的具体代码,供大家参考,具体内容如下代码在官方文档的示例代码中有,但是作为一个
- MySQL 数据表是由行和列构成的,通常把表的“列”称为字段(Field),把表的&
- 前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是在处理一些复杂背景问题的时候,还是容易出现错漏检的问
- 【简 介】熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custon Style来调用Style标准,也可以在
- orm表单使用csrfa. 基本应用form表单中添加{% csrf_token %}b. 全站禁用# 'django.middle
- 1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。 他
- Python序列类型在本博客中,我们将学习探讨Python的各种“序列”类,内置的三大常用数据结构——列表类(list)、元组类(tuple
- 前言虽然各种编程语言之间大部分语法存在共通的地方,但是在一些细节的处理上还是千差万别才接触Python不久(之前是学Java的),实在想吐槽
- PyCharm是Python著名的Python集成开发环境(IDE)conda有Miniconda和Anaconda,前者应该是类似最小化版
- /** * Ajax分页功能 * 在需要分页的地方添加<ul class="pagination"><
- 先来看段mysql查询文章回复语句:#查询文章回复-- ------------------------------ Procedure s
- 本次系统环境os: Deepin(Linux)Python: 3.7lib: PyYAML=5.3.1 | selenium=3.141.0
- 目录项目地址功能概述效果图模块安装提交环境为python3.7 pyqt5==5.13.2 win10 一切正常!说一说大概的思路吧项目地址
- 代码及注释如下#Auther Bob#--*--conding:utf-8 --*--#生产者消费者模型,这里的例子是这样的,有一个厨师在做
- 一、概述现有一个用户表,需要将表数据写入到excel中。环境说明mysql版本:5.7端口:3306数据库:test表名:users表结构如