经典ASP SQL查询返回十列中的两列

时间:2009-03-19 08:29:55

标签: sql asp-classic

我希望有人可以帮助解决问题...我不参与任何与编程有关的事情,但我们需要一些资产跟踪非常糟糕,所以在我的业余时间(不是很多,我们平均10小时) )并使用手头的工具(600mhz堆运行winXP)我建立了一个经典的ASP站点来处理所有的跟踪和订单。

一切都很好,直到我决定我有更多的业余时间,并决定升级一点。整件事情非常混乱,但最糟糕的是它的上帝非常缓慢。所以我决定放弃我的访问数据库和JET驱动程序并使用MS SQL Server 2000 Express(不要忘记,600mhz和不多RAM)。我开始重建,一切似乎工作得很好(并且更快),直到我开始出错。我发现对于某些查询,只有几个列会返回任何数据。

例如:我有一个shopitems表,包含gID(uniqueID),iDesc(描述),iLength,iQty,colID(交叉引用)。我进行查询以获取某个类别中的所有内容:Select * from shopitems where catID=22 order by gID asc。然后我开始逐步完成并全部显示。

问题是,只有gID和colID字段有数据,其他一切都没有。我打开了Web Data Administrator应用程序并在那里运行查询,它返回一切都很好。所以我决定某处有一个bug,所以我写了一个快速的测试页面和同样的问题(除了这次返回数据的gID和iLength)。它的数据类型混合,iDesc是nText,iLength是int。我已经完成了我能找到的所有内容,但我想到了我在SQL中缺少的东西......任何人都有任何想法?
另外,我在家里丢弃的电脑上复制了这个,它实际上有一个现代处理器和相当数量的RAM,所以它根本就不是机器。

感谢您的帮助...我听播客,好像它已经服务器/ sql一周了一段时间,我想在这里问别人......

---- ---- EDIT
改变了代码...这个代码的版本工作了一秒钟,现在没那么多......如果我注释掉了

gID=rs1("gID")

然后我得到iDesc的值,但不是。否则。

<%@ Language=vbscript %>

该死

Set db1 = Server.CreateObject("ADODB.Connection")
'db1.Open "Provider=MSDASQL;Driver={SQL Server};Server=Phsion;Database=master;"
db1.Open "Provider=MSDASQL;DSN=SHOPWEB;"
'sqltxt="select gID, iLength, iDesc from shopitems where catID=45 order by CAST(idesc as varchar)"

sqltxt="select iDesc, gID from ShopItems order by gID asc"
set rs1=db1.execute(sqltxt)
rs1.movefirst
do until rs1.eof
  gID=rs1("gID")
  'iLength=rs1("iLength")

  iDesc=rs1("iDesc")

  response.write("<br>gID: " & gid & "<br>")

  response.write("<br>iLength: " & iLength & "<br>")

  response.write("<br>iDesc: " & iDesc & "<br>")
  rs1.movenext
loop
rs1.close
set rs1=nothing
db1.close
set db1=nothing

4 个答案:

答案 0 :(得分:3)

在顶部添加Option Explicit(在&lt;%和%&gt;内)以进行变量声明,然后使用Dim variable-name-goes-here为所有变量声明变量,瞧,你会看到问题马上。

答案 1 :(得分:2)

如果你不是选择所有内容(*),而是选择所需的列 - 你还有同样的问题吗?即:

SELECT gID, iDesc, iLength, iQty 
FROM shopitems
WHERE catID = 22

答案 2 :(得分:1)

这是一个令人困惑的问题。如上所述,请务必启用选项显式以帮助查找任何变量名称问题。如果您使用了 On Error Resume Next ,那么您可以使用 On Error Goto 0 来确保您没有压制错误

这是我的看法。如果可以进行调试,请将其分解为自己的文件。如果我的循环产生输出,我们可以追踪事情。

<%
Option Explicit
On Error Goto 0

Dim db1, sqltxt, rs1
Dim gID, iLength, iDesc, arrRS

Set db1 = Server.CreateObject("ADODB.Connection")
'db1.Open "Provider=MSDASQL;Driver={SQL Server};Server=Phsion;Database=master;"
db1.Open "Provider=MSDASQL;DSN=SHOPWEB;"
'sqltxt="select gID, iLength, iDesc from shopitems where catID=45 order by CAST(idesc as varchar)"


'   sqltxt="select iDesc, gID from ShopItems order by gID asc"
'   set rs1=db1.execute(sqltxt)
'   rs1.movefirst
'   do until rs1.eof
'       gID = rs1("gID")
'       'iLength=rs1("iLength")
'       iDesc = rs1("iDesc")
'       response.write("gID: " & gid & "")
'       response.write("iLength: " & iLength & "")
'       response.write("iDesc: " & iDesc & "")
'       rs1.movenext
'   loop
'   rs1.close : set rs1=nothing

sqltxt="select iDesc, gID from ShopItems order by gID asc"
set rs1=db1.execute(sqltxt)
'//Dump the recordset into an array
arrRS = rs1.GetRows()
'//We can close the rs now since we don't need it anymore
rs1.close : set rs1=nothing

'//We are going to basically dump a HTML table that should look like you SQL viewer
Response.Write("<table>")
'//Loop through all the rows
For i = 0 To UBound(arrRS,2)
    Response.Write("<tr>")
    '//Loop through all the columns
    For j = 0 To UBound(arrRS,1)
            '//write out each column in the row
            Response.Write("<td>" & arrRS(j,i) & "</td>")
            '//Look I will be honest, I can't test this so your might have to swap the i and the j to get a full output
    Next
    Response.Write("</tr>")
Next
Response.Write("</table>")

db1.close : set db1=nothing
%>

答案 3 :(得分:0)

我不知道您是否已修复此问题,但如果没有,则应尝试更改选择列的顺序,以便nText字段结束。这有一个技术解释(与记录的最大字节长度有关,iirc)。