asp中在JScript中使用RecordSet对象的GetRows

写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

(0)

相关推荐

  • 探讨:JavaScript ECAMScript5 新特性之get/set访问器

    EcmaScript5简介 首先得先搞清楚ECMAScript是神马,我们知道JavaScript或者说LiveScript最开始是Netscape搞出来的,后来微软也跟进搞出了Jscript,ScriptEase也有自己的CENvi,这样就有了三个版本的浏览器Script各行其是,大家懂这个混乱的,于是乎标准化的问题被提上议事日程.1997年以JavaScript1.1为蓝本的建议被提交到欧洲计算机制造商协会( E uropean C omputer M anufacturers A ssoc

  • JavaScript中的getTimezoneOffset()方法使用详解

    javascript date.getTimezoneOffset() 方法返回时区以分钟为当前区域的偏移.时区偏移量是差分钟,格林尼治标准时间(GMT)是相对于您的本地时间. 例如,如果时区是GMT+10,-600将被返回.夏令时防止从一个恒定的这个值. 语法 Date.getTimezoneOffset() 下面是参数的详细信息: NA 返回值: 返回时区以分钟为当前区域的偏移. 例子: <html> <head> <title>JavaScript getTime

  • JS的get和set使用示例

    巧用get和set,能够直接操作对象属性实现读写,可以极大的提高编程效率,给出一个典型示例: 复制代码 代码如下: var test = { _Name : null, _Age : 0, //_Name的读写 set name(name) {this._Name = name;}, get name() {return this._Name;}, //_Age的读写 set age(age) {this._Age = age;}, get age() {return this._Age;} }

  • AngularJS 2.0新特性有哪些

    AngularJS已然成为Web应用开发世界里最受欢迎的开源JavaScript框架.自成立以来,见证其成功的是惊人的经济增长以及团体的支持与采用--包括个人开发者.企业.社区. Angular已经变成一个构建复杂单页面应用的客户端MVW框架(Model-View-Whatever).它在应用测试和应用编写方面都扮演重要角色,同时简化了开发过程. Angular目前的版本为1.3,该版本稳定,并被谷歌(框架维护者)用于支持众多应用(据估计,在谷歌有超过1600个应用运行于Angular1.2或1

  • JavaScript1.6数组新特性介绍以及JQuery的几个工具方法

    JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 .这些方法已经被写进了ECMA262 V5.现代浏览器(IE9/Firefox/Safari/Chrome/Opera)都已经支持,但IE6/7/8不支持.jquery的工具方法中提供了类似的功能. 1.Array.forEach()和jquery的$().each().在数组中的每个项上运行一个函数.类似java5 增强的for循环. 复制代码 代码如下: var ary =

  • javascript中的__defineGetter__和__defineSetter__介绍

    Getter是一种获取一个属性的值的方法,Setter是一种设置一个属性的值的方法.可以为任何预定义的核心对象或用户自定义对象定义getter和setter方法,从而为现有的对象添加新的属性. 有两种方法来定义Getter或Setter方法: 1.在对象初始化时定义 2.在对象定义后通过Object的__defineGetter__.__defineSetter__方法来追加定义 在使用对象初始化过程来定义Getter和Setter方法时唯一要做的事情就是在getter方法前面加上"get&qu

  • W3C Group的JavaScript1.8 新特性介绍

    JavaScript 1.8 计划作为Gecko 1.9(将要合并在Firefox 3中)的一部分开始使用的.比起JavaScript 1.7来说,这只是很小的更新,不过它也确实包含了一些向ECMAScript 4/JavaScript 2进化的痕迹.JavaScript 1.8还将包含在JavaScript 1.6 和 JavaScript 1.7中的所有新特性. 使用 JavaScript 1.8 为了可以在HTML中使用 JavaScript 1.8 的新特性,需要如下这样写: <scri

  • javascript setAttribute, getAttribute 在不同浏览器上的不同表现

    测试环境(客户端浏览器 ) IE6,IE7, IE8兼容模式, IE8 Firefox 3.6.8, google chrome 5.0.375.125 先来说明两个函数的标准定义. elementNode.setAttribute(name,value) name 必需.规定要设置的属性名. value 必需.规定要设置的属性值. 该方法把指定的属性设置为指定的值.如果不存在具有指定名称的属性,该方法将创建一个新属性. elementNode.getAttribute(name) name 必

  • asp中在JScript中使用RecordSet对象的GetRows

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

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

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

  • 使用Ajax更新ASP.Net MVC项目中的报表对象方法

    Ajax技术显著加快了Web应用程序的速度.另外,视觉效果方面也有提升.大家都同意,每次点击按钮时整个页面都会被刷新这一点不太友好.如果你的网速不是很快,那么这个过程会很烦人,因为所有的元素都会先消失,再慢慢重新出现.如果只刷新一部分页面,那就美滋滋了.而这正是Ajax所提供的.该脚本向服务器发送一个请求,以更新所需的部分信息.然后,脚本将更新的数据插入页面上的正确位置. 在这个页面中,我想用一个简单的方法通过Ajax更新ASP .Net MVC项目中的信息.这种方法被称为"unobtrusiv

  • 在JScript中使用缓存技术的实际代码

    在使用VBScript时,我们可以用Application缓存数组来实现缓存,例: 程序代码: 复制代码 代码如下: Dim rs,arr  rs.Open conn,sql,1,1  arr=rs.GetRows()  Application.Lock()  Application("cache")=arr  Applicatoin.UnLock() 在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我

  • 解决 JScript 中使用日期类型数据时出现类型错误的问题

    例如以下代码: 程序代码: 复制代码 代码如下: <%@LANGUAGE="JScript" CODEPAGE="65001"%>  <script language="JScript" runat="server">  Response.Cookies("xujiwei")("name") = "xujiwei";  Response.Coo

  • JScript中正则表达式用法详解

    呵呵,先罗嗦几句,去年用C#做了一个语法高亮的小东西,根据配制文件中的信息把所给代码格式化成HTML,使它能在网页上显示出和编辑器里一样的语法元素高亮的效果以及支持代码折叠.没错,就是和博客园上看到的类似啦.因为我当时使用的是MSN Space,它没有提供这项功能,只好自己写一个咯. 我使用的是C#进行编写,起初使用的是超级繁琐的for,while,switch,if等基本语句来判断关键字等等,大家莫笑话,本人愚笨当时还不知道正则表达式是何物,所以只能用这种土办法了,当然土办法还是有效果的,只是

  • JScript中正则表达函数的说明与应用

    作为模式匹配下文本替换.搜索.提取的强有力工具,正则表达式(Regular Expression)的应用已经从unix平台逐渐渗入到网络开发中了,作为服务器端/客户端的脚本开发语言JScript,正越来越多将正则表达式应用融入其中,以弥补自身在文本上处理能力的不足.在此,我们以JScript5.5版本为例,对其中的正则表达式的应用作一个概述. 首先我们需要区分JScript中关于正则表达式的两个对象:Regular Expression对象和RegExp对象. 前者仅包含一个特定的正则表达式实例

  • ASP.NET Core应用中与第三方IoC/DI框架的整合

    一.ConfigureServices方法返回的ServiceProvider没有用! 我们可以通过一个简单的实例来说明这个问题.我们先定义了如下这个一个MyServiceProvider,它实际上是对另一个ServiceProvider的封装.简单起见,我们利用一个字典来保存服务接口与实现类型的映射关系,这个关系可以通过调用Registe方法来注册.在提供服务实例的GetService方法中,如果提供的服务类型已经被注册,我们会创建并返回对应的实例对象,否则我们将利用封装的这个ServiceP

  • JScript中的条件注释详解

    JScript 可以使用以下语句根据条件编译变量的值控制脚本的编译.既可以使用 JScript 提供的变量,也可以使用 @set 指令或 /define 命令行选项定义自己的变量. @cc_on   激活条件编译支持.   @if   根据表达式的值,有条件地执行一组语句.   @set   创建使用条件编译语句的变量.   @cc_on.@if 或 @set 语句激活条件编译.条件编译的一些典型用途包括在 JScript 中使用新功能.将调试支持嵌入到一个脚本中以及跟踪代码执行. 当编写由 W

  • 在ASP.NET 2.0中操作数据之十五:在GridView的页脚中显示统计信息

    导言 除了需要了解产品的单价.库存量和订货量,并按等级排序之外,用户可能还对统计信息感兴趣,比如说平均价格.库存总量等等.这些统计信息常常显示在报表最下面的一个统计行中.GridView控件可以含有一个页脚行,我们可以通过编程将统计数据插入到它的单元格里面去.这个任务给了我们以下3个挑战: 1.配置GridView以显示它的页脚行 2.确定统计数据.即我们应该如何计算平均价格还有库存总量? 3.将统计信息插入到页脚行的相应的单元格中 在本节教程中,我们将会看到如何去征服这些挑战.另外呢,我们将创

随机推荐