百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
博主最大Lv63   
asp中在JScript中使用RecordSet对象的GetRows_编程1000     

NEWSZW_HZH_BEGIN--> 写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 NEWSZW_HZH_END-->

 0  已被阅读了1235次  楼主 2020-07-07 13:34:50
回复列表

回复:asp中在JScript中使用RecordSet对象的GetRows_编程1000

联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:18.217.220.114,2024-04-19 12:18:21,Processed in 0.01804 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
已有0次打赏
(0) 分享
分享
取消
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com