2011-10-07 38 views
0

我有一個SqlDataAdapter,看起來像什麼:在這個SqlDataAdapter中使用什麼?

("Select prodID, CatalogType, prodName, catID, Integration, ItemProfileCatalogID From ShoppingCart t1 
INNER JOIN ItemCatalogProfile t2 ON t1.CatalogType = t2.CatalogType 
WHERE SessionID = '" + Session["ID"] + "' AND CatalogID ='" + Session["Customer"] ....) 

還有更多的是一些包含在where語句,但一個我似乎無法得到工作是:

ItemProfileCatalogID .. 

我需要包括這些將項目縮小到只有其中的一項,如果我能夠弄清楚在這個聲明中使用什麼,這個變量就可以做到這一點。

我已經試過

viewstate[""] 
Request.QuerryString[""] 
Session[""] 

,我不能似乎得到那些工作..

我遇到的問題是,如果我沒有這個項目篩選當前的購物車,它將返回數據庫中該特定產品的每個實例,因爲對於不同的目錄有多達250個一個項目的列表,並且這是ItemProfileCatalogID進入的位置,這將將其過濾爲僅一個項目

有什麼建議麼?

謝謝

+0

你得到任何錯誤訊息? – Purplegoldfish

+0

你有什麼問題?這是一條錯誤消息嗎? –

+1

我不完全知道你是問什麼,但我知道,你不應該使用字符串連接創建的SQL語句。特別是如果他們來自查詢字符串。請參見[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)。 –

回答

1

CatalogID可能是數字和你正在使用它作爲你的SQL語句的字符串。

這也可能是你在你的SQL語句中的一些語法錯誤不會輕易與所有的字符串連接正在進行或由於CatalogID包含一個調皮的性格('例如)

而且檢測,請查看parametrized查詢;級聯構建SQL語句時,通常不是一個很好的主意(SQL injection)。

+0

刪除了'',是的它是數字,我現在得到:'對象引用未設置爲一個對象',所以我猜測它來自於它實際上並沒有返回任何東西 –

1

正如插圖中說,這可能是它是數字的問題,您應該能夠使用的ToString()方法來解決這個問題。

而且存儲過程是generaly更明智的使用有很多原因,你的情況,你提到你是一個購物車的建議,也許某種電子商務應用的工作?使用存儲過程在這裏將意味着SQL不必在每次運行從而提高性能並具有一個存儲過程的代碼也將增加可維護性和可能讓你重新使用在其他地方的程序的編譯時間SELECT語句。

除此之外,實際上並沒有通過網絡傳輸選擇語句來提高安全性,因爲沒有人可以攔截此表並獲得對錶結構的洞察,並且因爲上面提到的InBetween存儲過程將幫助您防止注入攻擊或者只是簡單地取消數據傳輸,因爲您可以更輕鬆地添加錯誤處理。

+0

我嘗試使用.ToString()方法,但沒有成功。我想先讓這個函數正常工作,一旦我完成了,我將更加專注於創建和實現Stored Proc ..你是否建議使用ViewState或者我應該使用什麼來獲取變量? –

相關問題