ASP在JScript中使用RecordSet对象的GetRows方法

js|jscript|对象

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

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

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

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

  程序代码:

'' 定义变量
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">
// 定义变量
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;
// 数组转换函数
// 参数: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的性能。

时间: 2024-12-05 03:23:46

ASP在JScript中使用RecordSet对象的GetRows方法的相关文章

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

js|对象 写ASP程序时,一般情况总是使用的VBScript,不过也不只是这一种选择,也可以用JScript.但在用JScript作为ASP的语言时,比用VBScript有一些小小的不方便,比如RecordSet的GetRows方法. 在ASP中操作数据库,一般都要用到RecordSet对象,如果注重程序效率的话,可能就会用到RecordSet对象的GetRows方法,把记录集对象转换成数组,而操作数组在速度上将比用RecordSet对象的MoveNext方法快很多,而且可以在取出数组后尽早释

php-PHP低版本中,类对象在使用方法提取数据后直接使用数组访问符号是否有问题?

问题描述 PHP低版本中,类对象在使用方法提取数据后直接使用数组访问符号是否有问题? "$this->somemethod()[]"是否会出问题?如果是在foreach循环呢?PHP版本为5.3 解决方案 somemethod()如果返回的是数组,这么写没有问题.

socket-java中,Socket对象的getOutputStream方法

问题描述 java中,Socket对象的getOutputStream方法 返回的是具体什么类型的对象? PrintOutputStream? 解决方案 打印看一下就知道什么类了 System.out.println(getOutputStream.getClass()); 解决方案二: 不是OutputStream么? 你是想它返回的是一个object,然后解释出一个对应的实体对象? 不过jdk的socket是底层的,只有上层的框架才能吧,比如mina可以自定义传输协议,发送接收的都可以是一个

Asp.net MVC中获取控制器的名称的方法_实用技巧

1.视图中 string controller = ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"].ToString(); string controller = ViewContext.RouteData.Values["controller"].ToString(); 2.控制器的action中 string controller = RouteData.Ro

javascript实现类似java中getClass()得到对象类名的方法_javascript技巧

本文实例讲述了javascript实现类似java中getClass()得到对象类名的方法.分享给大家供大家参考.具体如下: 在javascript中没有能够返回特定类型名的函数 如一个对象 console.log(obj); 得到的是[object HtmlTableCellElement]如果想要一个函数能够返回HtmlTableCellElement js中默认没有这样的函数 可以自己实现一个 var getObjectClass = function (obj) { if (obj &&a

asp中记录集对象的getrows和getstring用法分析_应用技巧

GetRows 方法 将 Recordset 对象的多个记录复制到数组中. 语法 复制代码 代码如下: array = recordset.GetRows( Rows, Start, Fields ) 返回值 返回二维数组. 参数 Rows 可选,长整型表达式,指定要检索记录数.默认值为 adGetRowsRest (-1). Start 可选,字符串或长整型,计算得到在 GetRows 操作开始处的记录的书签.也可使用下列 BookmarkEnum 值. 常量 说明 AdBookmarkCur

asp中记录集对象的getrows和getstring用法分析

GetRows 方法 将 Recordset 对象的多个记录复制到数组中. 语法 复制代码 代码如下: array = recordset.GetRows( Rows, Start, Fields ) 返回值 返回二维数组. 参数 Rows 可选,长整型表达式,指定要检索记录数.默认值为 adGetRowsRest (-1). Start 可选,字符串或长整型,计算得到在 GetRows 操作开始处的记录的书签.也可使用下列 BookmarkEnum 值. 常量 说明 AdBookmarkCur

一起谈.NET技术,ASP.NET MVC中对数据进行排序的方法

本系列是讲解如何在asp.net mvc中对数据进行展示.排序.分页等的系列文章.在上周的文章中,一步一步教会了大家如何使用ASP.NET MVC框架去的展示数据.在上周的文章中,我们先用Visual Studio创建了一个新的ASP.NET MVC应用程序,接着连接到了Northwind数据库,并展示了如何使用微软的LINQ-SQL的工具去访问数据库中的数据,接着指导如何去实现视图层去展示产品信息及如何设计控制器. 本文是在上一篇文章的例子基础上,展示了如何去实现数据的双向排序.如果你是已经熟

ASP.NET MVC中图表控件的使用方法_实用技巧

微软发布了一个强大的ASP.NET的图表控件,支持丰富的图表选项设置-包括列,点,泡沫,饼图,圆环图,金字塔,漏斗,盒形图,面积,范围,AJAX的互动,以及更多.Microsoft图表控件示例项目包括ASP.NET页的图表样本超过200个.在这篇文章中,我将展示如何在ASP.NET MVC中使用图表控件. 这里介绍一个非常简单的项目,显示了一个类的结果比较.两个字段 - ID(这是唯一的一个学生)和GPA(平均成绩) - 代表一个特定的学生的结果.各种图表结果显示,学生的结果进行比较.我希望把重