2008-12-11 142 views
0

嗯,我正在查詢我的數據庫,一個名爲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) 

這樣工作,我知道我的表列標題是正確的我已經看過它,並在之前的其他查詢中使用它。有誰知道爲什麼會發生這種情況?這是否是由於未清除我的連接或關閉後的結果?

謝謝

回答

2

嘿,這是一個錯字,你沒有這個?

查詢= 「SELECT BILLINGID FROM bookBilling WHERE CUSTID =」 & CUSTID & 「」

objRS = objConn.Execute(查詢)

要重新加載與所述記錄數據和第二查詢的定義.....

只是想一想,試試Setting/Insta ntiating的ObjRS的記錄,再後query.execute適用於它,而不是最初都在一個與第一CUSTID查詢

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。但是,如果像我推薦的那樣整合查詢,這一切都將變得毫無意義。

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

你不打開resordset對於第二個查詢。 而且,不知道這是否有任何影響,但我從來沒有將我的詢問命名爲相同。可以肯定,我猜。

編輯,這就是我上面的人說的,我是一個Slowpoke。

0

該死的,是的,這是一個錯字。我不確定我是否理解爲什麼它仍然使用列編號,但不是列名,即使我沒有打開記錄集。

@Joel Coehoorn 感謝有關內部加入查詢的信息。我的老師一直告訴我們要這樣做,但直到我看到這一點時,我才真正理解這一點。

對於我的表我不能真正使用它,因爲註冊時不一定有billingID,所以偶爾會遇到一些「EOF」。

謝謝大家!

+0

如果您使用像Access一樣的程序來處理數據庫,那麼可以讓它爲您編寫SELECT查詢,這對於大量的連接來說非常簡單。 :) – Kablam 2008-12-11 15:00:15