Vbscript 经典ASP 3.0从记录集创建阵列
我正在尝试修复一个ASP经典应用程序,当我尝试从记录集对象创建数组时。但是我不能让它正常工作 此代码为我提供了一条记录(最后一条),但据我所知,它是正确的:Vbscript 经典ASP 3.0从记录集创建阵列,vbscript,asp-classic,ado,Vbscript,Asp Classic,Ado,我正在尝试修复一个ASP经典应用程序,当我尝试从记录集对象创建数组时。但是我不能让它正常工作 此代码为我提供了一条记录(最后一条),但据我所知,它是正确的: Dim Products Dim Products_cmd Dim Products_numRows Set Products_cmd = Server.CreateObject ("ADODB.Command") Products_cmd.ActiveConnection = Conn Products_cmd.CommandText
Dim Products
Dim Products_cmd
Dim Products_numRows
Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC"
Products_cmd.Prepared = true
Set Products = Products_cmd.Execute
Products_numRows = 0
Dim arrProducts()
arrProducts = Products.GetRows()
使用此代码会给我一个“下标超出范围:'UBound'
Dim Products
Dim Products_cmd
Dim Products_numRows
Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC"
Products_cmd.Prepared = true
Set Products = Products_cmd.Execute
Products_numRows = 0
Dim arrProducts()
Dim counter
For counter = 0 to Products.RecordCount - 1
ReDim Preserve arrProducts(counter,2)
arrProducts(counter,0) = Products.Fields.Item("prod_id").Value
arrProducts(counter,1) = Products.Fields.Item("prod_description").Value
Products.MoveNext
Next
Response.Write(Str(UBound(arrProducts)))
如果您有任何想法,我们将不胜感激……第一个代码块看起来是正确的。您确定正在读取返回数组的第二维数据吗?这就是GetRow填充数组的方式 ARR产品(0,0)=>产品id-第1行 ARR产品(1,0)=>产品描述-第1行 ARR产品(0,1)=>产品id-第2行 ARR产品(1,1)=>产品描述-第2行 等等,还有 产品名称() 应该是 暗色产品
您就快到了,问题是
GetRows()
返回一个二维数组,您需要告诉您想要哪个维度
工作代码:
Dim Products
Dim Products_cmd
Dim Products_numRows
Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC"
Products_cmd.Prepared = true
Set Products = Products_cmd.Execute
Dim arrProducts
arrProducts = Products.GetRows()
dim i
response.write "<table>"
For i = 0 to ubound(arrProducts, 2)
response.write "<tr>"
response.write("<td>" + trim(i+1))
response.write("<td>" + trim(arrProducts(0,i)))
response.write("<td>" + trim(arrProducts(1,i)))
next
response.write "</table>"
%>
Dim产品
Dim Products\U cmd
暗色产品
Set Products\u cmd=Server.CreateObject(“ADODB.Command”)
Products\u cmd.ActiveConnection=Conn
Products_cmd.CommandText=“从dbo.Products ORDER BY prod_description ASC中选择产品id、产品描述”
Products\u cmd.Prepared=true
Set Products=Products\u cmd.Execute
暗色产品
arrProducts=Products.GetRows()
昏暗的我
响应。写入“”
对于i=0到ubound(2)
响应。写入“”
回答。写(““+trim(i+1))
响应。写入(“+trim(0,i)))
回答。写(“+trim(1,i)))
下一个
响应。写入“”
%>
要扩展amit\g解释:
<% OPTION EXPLICIT %>
<%
sub echo(x)
response.write x
end sub
dim conn : set conn = server.createobject("ADODB.CONNECTION")
conn.open("Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;Initial Catalog=tinker;uid=sa;pwd=devpassword")
dim sql : sql = "select '1a' as ColA , '1b' as ColB union all select '2a' , '2b' union all select '3a' , '3b' "
dim rs : set rs = conn.execute(SQL)
dim arr : arr = rs.GetRows()
dim cols : cols = ubound(arr,1)
dim rows : rows = ubound(arr,2)
dim x , y
echo "<table border='1' style='border-collapse:collapse;'>"
echo "<tr>"
echo "<td> </td>"
for x = 0 to cols
echo "<th>Col " & x & "</th>"
next
echo "</tr>"
for y = 0 to rows
echo "<tr>"
echo "<th>Row " & y & "</th>"
for x = 0 to cols
echo "<td>" & arr(x,y) & "</td>"
next
echo "</tr>"
next
echo "</table>"
%>
我认为对于在ASP中工作的PHP程序员来说,最大的困惑是数组维度的顺序与您期望的相反
来自PHP,我希望数组(0,2)是第一条记录,第三列。不,这是第三条记录的第一列。如果你想要类似于关联数组的东西,你需要研究创建“字典”只是告诉你一个PHP程序员不应该写ASP代码……哈哈哈。谢谢Eduardo!