asp中在JScript中使用RecordSet对象的GetRows
程序员文章站
2022-03-10 14:17:49
写asp程序时,一般情况总是使用的vbscript,不过也不只是这一种选择,也可以用jscript。但在用jscript作为asp的语言时,比用vbscript有一些小小的...
写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
上一篇: ASP问答集
推荐阅读
-
HighCharts图表控件在ASP.NET WebForm中的使用总结(全)
-
ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用
-
在asp中通过getrows实现数据库记录分页的一段代码
-
FCKeditor在asp.net中的使用
-
在ASP.NET Core中创建内部使用Scoped服务的Quartz.NET宿主服务
-
jwt-在asp.net core中的使用jwt
-
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
-
访问asp页面出现出现“请求的资源在使用中”的解决办法
-
asp中在JScript中使用RecordSet对象的GetRows
-
asp中记录集对象的getrows和getstring用法分析