日期:2014-05-17  浏览次数:21075 次

ASP rs.getrows方法获取记录数

大家可能经常会遇到这种情况:

  1. sql="select?*?from?table"?
  2. set?rs=conn.execute(sql)?

以上这两句执行完之后,如果使用response.write?rs.recordcount,就会得到结果-1,但这个时候,记录集rs当中其实是有记录的。为了得到正确的记录总数,我们使用getrows.

  1. sql="select?*?from?table"?
  2. set?rs=conn.execute?(sql) ?
  3. arrA=rs.getrows?'将记录集放在一个二维数组中 ?
  4. response.write?ubound(arrA,2)+1?

就会得到记录集的记录总数

  1. response.write?ubound(arrA,1)+1?

就会得到记录集的总列数
==========================================================

另外,还有一种获取记录总数的方法:

  1. jls=?conn.execute("Select?count(*)?From?table").getstring?

这时候,变量jls的值,便是记录总数了
GetRows?方法传回一个二维的阵列变数,每一行对应Recordset中的一笔记录,且每一列对应到记录中的栏位。此方法的语法如下:

  1. varArray?=?rs.GetRows([Rows],?[Start],?[Fields])??

Rows?是要读取记录的数量;如果想要取得Recordset所有记录,可用-1或省略此参数。Start?是指出第一个被读取记录的书签;也可以是下列列举常数中的一个:0-adBookmarkCurrent(目前记录)、1-adBookmarkFirst(第一笔记录)、或2-adBookmarkLast(最后记录)。?

Fields?是可选择的栏位名称阵列,其用来限制要读取的资料量。(也可指定单一栏位名称、单一栏位索引、或者一个栏位索引阵列)。当设定?Rows?为少於Recordset记录笔数时,第一笔未读取的记录变成现行记录。若省略?Rows?参数或设定为-1-adGetRowsRest或大於未读取的笔数时,GetRows?方法会读取所有记录并让Recordset在EOF状态,而不会产生任何错误。?

当处理目的变数阵列的资料时,应该记得资料储存方式是有点相反的感觉:阵列中第一维定义Recordset的栏位(资料行),第二维定义Recordset的资料列。以下有个载入Recordset内所有记录某三个栏位的范例:?

  1.   Dim?values?As?Variant,?fldIndex?As?Integer,?recIndex?As?Integer? ?
  2.   values?=?rs.GetRows(,?,?Array("LastName",?"FirstName",?"BirthDate"))? ?
  3.   For?recIndex?=?0?To?UBound(values,?2)? ?
  4.   ?For?fldIndex?=?0?To?UBound(values)? ?
  5.   ?Print?values(fldIndex,?recIndex),? ?
  6.   ?Next? ?
  7.   ?Print? ?
  8.   Next??

GetRows?方法通常比一次读一笔记录的回圈要来得快些,但使用这方法时,必须确定Recordset未包含太多记录;否则,会很容易以一个非常大的变数阵列来填满所有记忆体。基於相同的原因,得小心不要包括任何BLOB(Binary?Large?Object)或CLOB(Character?Large?Object)栏位;若如此做的化,应用程式一定会爆掉,特别是对於较大的Recordset而言。最后,记住此方法传回的变数阵列是以0为基底的;传回记录的笔数是UBound(values,2)+1,传回栏位数是UBound(value,?1)+1。