asp中在JScript中使用RecordSet对象的GetRows
来源:易贤网 阅读:724 次 日期:2014-08-09 16:22:26
温馨提示:易贤网小编为您整理了“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的性能。

更多信息请查看IT技术专栏

更多信息请查看网络编程
下一篇:ASP问答集
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标