ASP Classic:使用getrows()和2D数组错误下标超出范围

时间:2014-06-17 19:50:02

标签: arrays vbscript asp-classic

专家可以查看我的脚本吗?我在Classic ASP中遇到了一个奇怪的错误:

  

Microsoft VBScript运行时错误' 800a0009'
  下标超出范围:'我'
在第23行:对于i = 0到ubound(arDataArray)

Set adoCn = CreateObject("ADODB.Connection")
Set AdoRs = CreateObject("ADODB.Recordset")

'Find out connecting credentials
strSERVERspecific=Coli(0)
strDATABASENAMEspecific=Coli(1)
strUIDspecific=Coli(2)
strPWDspecific=Coli(3)

adoCn.Open "Provider=SQLOLEDB;server=" & strSERVERspecific & ";database=" & strDATABASENAMEspecific & ";uid=" & strUIDspecific & ";pwd=" & strPWDspecific & ";"


sSql = "Select * From Customers"
set adoRs = adoCn.Execute(sSql)

'GetRows Retrieves multiple records of a Recordset object into an array.
arDataArray = adoRs.GetRows

Response.Write "ArrayUbound=" & ubound(arDataArray) & "<br>"
For i = 0 to ubound(arDataArray)
    Response.Write "(0,i) : " & arDataArray(0,i) & " (1,i) : " & arDataArray(1, i)
    Response.Write "(2,i) : " & arDataArray(2,i) & " (3,i) : " & arDataArray(3, i) & "<BR>"
Next

adoRs.Close
adoCn.Close

set adoRs = Nothing
Set adoCn = Nothing

为了确保我没有比阵列更多的记录或字段,我拍摄了我的&#34;客户&#34;表(但我还没有10点声望发布图片)。你必须相信我,我有:11个领域和4个记录。

我补充说,函数Coli(x)读取位于服务器端的txt文件的一行(隐藏于public / httpdocs),其中x等于以下相关行:

  • 1表示第1行=名称/ IP服务器
  • 2表示第二行=数据库名称
  • 3表示第3行=数据库中可用的用户名
  • 4表示第4行=用户密码

虽然这个功能显然没有问题。
我非常感谢任何提示在哪里寻找(我对此错误感到恼火,并且暂时无法解决)。非常感谢!

1 个答案:

答案 0 :(得分:3)

问题出在您的ubound语句中 - 没有维度参数的ubound将默认返回第一个维度,但您在第二个维度上迭代(使用i)。换句话说,你的i从0到10迭代,而不是从0到3。

因此,您应该将错误行更改为:

For i = 0 to ubound(arDataArray, 2)

那应该解决它。