经典ASP数据库错误
嗯,我正在查询我的数据库,一个名为bookBilling的表,以获取billingID列下的值。经典ASP数据库错误
在我的第一个查询中,我根据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)
这样工作,我知道我的表列标题是正确的我已经看过它,并在之前的其他查询中使用它。有谁知道为什么会发生这种情况?这是否是由于未清除我的连接或关闭后的结果?
谢谢
嘿,这是一个错字,你没有这个?
查询= “SELECT BILLINGID FROM bookBilling WHERE CUSTID =” & CUSTID & “”
objRS = objConn.Execute(查询)
要重新加载与所述记录数据和第二查询的定义.....
只是想一想,试试Setting/Insta ntiating的ObjRS的记录,再后query.execute适用于它,而不是最初都在一个与第一CUSTID查询
无论如何,运行两个单独的查询是缓慢的。将它们组合成一个语句几乎总是更快:
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
。但是,如果像我推荐的那样整合查询,这一切都将变得毫无意义。
query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""
objConn.Execute(query)
你不打开resordset对于第二个查询。 而且,不知道这是否有任何影响,但我从来没有将我的询问命名为相同。可以肯定,我猜。
编辑,这就是我上面的人说的,我是一个Slowpoke。
该死的,是的,这是一个错字。我不确定我是否理解为什么它仍然使用列编号,但不是列名,即使我没有打开记录集。
@Joel Coehoorn 感谢有关内部加入查询的信息。我的老师一直告诉我们要这样做,但直到我看到这一点时,我才真正理解这一点。
对于我的表我不能真正使用它,因为注册时不一定有billingID,所以偶尔会遇到一些“EOF”。
谢谢大家!
如果您使用像Access一样的程序来处理数据库,那么可以让它为您编写SELECT查询,这对于大量的连接来说非常简单。 :) – Kablam 2008-12-11 15:00:15