1

我们有一个使用 VB6 COM 的经典 ASP,如下所示:

Dim Value1
Dim Value2
Dim Value3
'Etc.

Dim VB6COM
Set VB6COM = Server.CreateObject("VB6COM")
VB6COM.GetSomeValues MyConnectionString, "TABLE_NAME", "ROW_ID = 1", _
"FIELD_NAME_1", Value1, _
"FIELD_NAME_2", Value2, _
"FIELD_NAME_3", Value3, ... Etc.

被调用的过程是这样的:

Public Sub GetSomeValues(ConnectionString, TableSource, SearchCondition, ParamArray Fields())

  'Code to open the database and retrieve the row goes here.
  'For this example to run without a database, we use example values below.

  For Index = 0 To UBound(Fields) Step 2
    Fields(Index + 1) = "ExampleValue" & Index
  Next

End Sub

我们希望停止使用 VB6COM 并将此功能移至 ASP 网站。

所以调用应该删除 Server.CreateObject 行并最终如下所示:

Dim Value1
Dim Value2
Dim Value3
'Etc.

GetSomeValues MyConnectionString, "TABLE_NAME", "ROW_ID = 1", _
"FIELD_NAME_1", Value1, _
"FIELD_NAME_2", Value2, _
"FIELD_NAME_3", Value3, ... Etc.

问题是,VBScript 不支持 ParamArrays。

我知道我们可以将 ParamArray 更改为数组对象。但是由于我们必须更改数千个调用,所以如果有一种方法可以保持原始调用会更好。

有任何想法吗?

4

1 回答 1

1

您可以在 Classic ASP 中使用 JScript,它支持可变数量的参数,可通过arguments“数组”访问。我无法对其进行测试,但我相信您可以并排包含这两种语言,并从 VBScript 调用 JScript 中定义的函数。

<script language="JScript">
    // these parameters aren't used directly but they document the positions
    function GetSomeValues(connString, tableName, whereClause, columnName, value /* , ... */) {

        var args = arguments.slice(0), // make arguments a proper array
            ado = new ActiveXObject("ADODB.Connection"),
            connectionString = args.shift(),
            tableName = args.shift(),
            whereClause = args.shift(),
            columns = args; // rest of the arguments are your columns

        ado.ConnectionString = connectionString;
        /* etc */
    }
</script>
<script language="VBScript">
     GetSomeValues MyConnectionString, "TABLE_NAME", "ROW_ID = 1", _
        "FIELD_NAME_1", Value1, _
        "FIELD_NAME_2", Value2, _
        "FIELD_NAME_3", Value3, ... Etc.
</script>
于 2017-08-08T21:30:56.420 回答