日期:2014-05-16  浏览次数:20331 次

JScript与VBcript:在使用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一样使用的话,还需要我们自己来做转换。

下面总结一个数组转换的函数用于在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]+