0

好吧,我正在查询我的数据库,一个名为 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

4 回答 4

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上一个查询的值。但是,如果您像我推荐的那样整合查询,那么这一切都变得毫无意义。

于 2008-12-11T14:31:30.583 回答
2

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

query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""

objRS = objConn.Execute(查询)

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

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

于 2008-12-11T14:51:26.783 回答
0
query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""
objConn.Execute(query)

您没有为第二个查询打开 resordset。而且,不确定这是否有任何影响,但我从不将我的查询命名为相同的。可以肯定的是我猜。

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

于 2008-12-11T14:53:25.720 回答
0

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

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

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

谢谢大家!

于 2008-12-11T14:56:23.810 回答