经典ASP数据库错误

时间:2008-12-11 14:19:37

标签: sql asp-classic odbc

我正在查询我的数据库,一个名为bookBilling的表,以获取billingID列下的值。

在我的第一个查询中,我根据cookie保存的值从表中获取客户ID。 在我的第二个查询中,我获取了custID值,并希望获得与之关联的billingID。

query = "SELECT custID FROM bookSession WHERE session='"&theCookie&"'"
'--Connect to DB'
 Set objConn = ConnectDB()
'--Query to DB'
 Set objRS = objConn.Execute(query)
 custID = objRS.Fields("custID")

  query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""
  objConn.Execute(query)

这就是问题所在。我尝试使用它来获取值:

billingID = objRS.Fields("billingID")

当这不起作用时,我将查询打印到我的浏览器以确保它有效并且它恢复良好,我在SQL Server Management Studio中检查它以确保。之后我决定玩一下,发现使用“0”作为参考,因为它是我表中的第一项。

billingID = objRS.Fields(0)

这样有效,我知道我的表列标题是正确的我已经看过它并在之前的其他查询中使用它。有谁知道为什么会这样?这是因为没有清除我的连接或之后关闭它?

由于

4 个答案:

答案 0 :(得分:2)

无论如何,运行两个单独的查询都很慢。将它们组合成一个语句几乎总是更快:

SELECT billingID
FROM bookBilling bb
INNER JOIN bookSession bs ON bs.custID=bb.custID
WHERE bs.session= @theCookie

另外:cookies只是文本文件,任何人都可以编辑文本文件。如果您直接在查询中替换cookie值,那么可能会有sql注入。这不是正常的攻击向量,但它仍然可能。

关于您的具体错误,您直接从连接执行第二个查询,而不是在记录集中打开它:

objConn.Execute(query)

我很惊讶你得到任何东西,我希望你在objRS.Fields(0)看到的价值可能只是前一个查询的custID。但是如果你像我推荐的那样整合查询,那一切都变得毫无意义。

答案 1 :(得分:2)

嘿,这是一个错字,你没有这个吗?

  

query =“SELECT billingID FROM bookBilling WHERE custID =”& custID&“”

     

objRS = objConn.Execute(查询)

使用第二个查询的数据和定义重新加载记录集.....

只是想一想,首先尝试将ObjRS设置/实例化为Recordset,然后将query.execute应用到它之后,而不是使用第一个CustId查询初始化一个

答案 2 :(得分:0)

query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""
objConn.Execute(query)

您没有为第二个查询打开resordset。 并且,不确定这是否有任何影响,但我从来没有说出我的查询相同。我敢肯定。

编辑,这就是我上面的人所说的,我是一个慢点。

答案 3 :(得分:0)

该死的,是的,这是一个错字。即使我没有打开记录集,我也不确定我是否理解为什么它仍然使用列号而不是列名。

@Joel Coehoorn 感谢内部加入查询的信息。我的老师一直在告诉我们这样做,但在我看到之前,我还没有真正理解它。

对于我的桌子,我不能真正使用它,因为注册时不一定有计费ID,所以我偶尔会遇到一些“EOF”。

谢谢大家!