Asp classic 对ADO记录集中的列(字段)重新排序

Asp classic 对ADO记录集中的列(字段)重新排序,asp-classic,vbscript,ado,Asp Classic,Vbscript,Ado,我有一个用vbscript编写的经典asp网页,它从第三方存储过程输出结果。我的用户希望页面以不同于数据库中数据列的顺序显示数据列是否有一种简单而安全的方法来重新排序ADO记录集中的列? 我没有编写此页面,无法更改SP。 我能在这里做的最小改动是什么,以完成工作,而不冒着把页面中所有其他内容都搞糟的风险 代码看起来像 dim Conn, strSQL, RS Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open ServerNa

我有一个用vbscript编写的经典asp网页,它从第三方存储过程输出结果。我的用户希望页面以不同于数据库中数据列的顺序显示数据列是否有一种简单而安全的方法来重新排序ADO记录集中的列?

我没有编写此页面,无法更改SP。 我能在这里做的最小改动是什么,以完成工作,而不冒着把页面中所有其他内容都搞糟的风险

代码看起来像

dim Conn, strSQL, RS
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ServerName

Set strSQL = "EXEC storedProc @foo = " & Request("fooParam")
'This stored procedure returns a date column, an arbitrary '
' number of data columns, and two summation columns.  We '
' want the two summation columns to move so they appear '
' immediately after the data column '

Set RS = Server.CreateObject("ADODB.RecordSet")
RS.ActiveConnection = Nothing
RS.CursorLocation = adUseClient
RS.CursorType = adOpenStatic
RS.LockType = adLockBatchOptimistic
RS.Open strSQL, Conn, adOpenDynamic, adLockOptimistic

dim A

' ----- '
' Insert some code here to move the columns of the RS around '
' to suit the whim of my user '
' ----- '


' Several blocks of code that iterate over the RS and display it various ways '
RS.MoveFirst
For A = 0 To RS.Fields.Count -1
    ' do stuff '
Next

...

RS.MoveFirst
For A = 0 To RS.Fields.Count -1
    ' do more stuff '
Next

RS.Close : Set RS = Nothing
Conn.Close : Set Conn = Nothing

获取列名,然后为其设置排序:

dim ColumnNames
set ColumnNames = CreateObject( "Scripting.Dictionary" )
For A = 0 To RS.Fields.Count -1
  ColumnNames.Add A, RS.Fields(A).Name
Next
这里,ColumnNames保存用于每个位置的列的名称。应用任何有意义的规则,您现在可以如下更改顺序:

'' swap order of columns 1 and 2
dim temp
temp = ColumnNames.item( 1 )
ColumnNames.item( 1 ) = ColumnNames.item( 2 )
ColumnNames.item( 2 ) = temp
最后,要获得新订单,请按如下方式打印:

For A = 0 To RS.Fields.Count -1
  Response.write( ColumnNames.item( A ) )
Next

获取列名,然后为其设置排序:

dim ColumnNames
set ColumnNames = CreateObject( "Scripting.Dictionary" )
For A = 0 To RS.Fields.Count -1
  ColumnNames.Add A, RS.Fields(A).Name
Next
这里,ColumnNames保存用于每个位置的列的名称。应用任何有意义的规则,您现在可以如下更改顺序:

'' swap order of columns 1 and 2
dim temp
temp = ColumnNames.item( 1 )
ColumnNames.item( 1 ) = ColumnNames.item( 2 )
ColumnNames.item( 2 ) = temp
最后,要获得新订单,请按如下方式打印:

For A = 0 To RS.Fields.Count -1
  Response.write( ColumnNames.item( A ) )
Next

为什么需要重新排序?如果您知道输出遵循某种模式:

日期,数据1,数据n,Sum1,Sum2


您有字段。Count可让您决定要显示多少DataN列,以及索引Sum1和Sum位于哪个位置。

为什么需要对它们重新排序?如果您知道输出遵循某种模式:

日期,数据1,数据n,Sum1,Sum2


您有字段。Count可以让您决定要显示多少个DataN列,以及索引Sum1和Sum位于哪个位置。

如果代码编写正确,结果集中列的顺序应该无关紧要,您不应该使用位置索引,而是使用命名索引。SP返回任意数量的列,这些列的名称同样是任意的。那么顺序是按列类型排列的吗?数据列是任意的,求和列也是任意命名的?使用正确编写的代码,结果集中列的顺序应该无关紧要,不应该使用位置索引,而是使用命名索引。SP返回任意数量的列,这些列的名称同样是任意的。那么顺序是按列类型排列的吗?数据列是任意的,求和列也是任意命名的?