2012-08-01 89 views
0

我有我使用過濾電網如何在這種情況下編寫select語句?

 SELECT * FROM Resources 
       WHERE ResourceName ='" + ResourceName + "' 
       AND Status = '" + status + "' " 

查詢和我的格子看起來像這樣

ResourceID|ResourceName|Status 

我已經添加了ResorceName和狀態在下拉現在濾除電網我問題是,在這個select語句中,如果任何參數爲null,則數據不綁定到網格,但如果我傳遞了這兩個參數,它會過濾網格,並從網格中提供所需的行或過濾行......任何人都可以告訴如果任何參數爲空,我該如何編寫select語句。

+0

如果兩者都爲null會怎麼樣?以及你可以編寫如果/當條件在sql – paragy 2012-08-01 13:01:19

回答

0
SELECT * FROM Resources 
WHERE (ResourceName = CASE WHEN '" + ResourceName + "' IS NULL THEN ResourceName ELSE '" + ResourceName + "' END) //do same for other parameter 
+0

我試過這個,但再次同樣的問題沒有行受到影響我有任何參數爲空 – SoftwareNerd 2012-08-01 14:27:24

+0

@alliswell ...我得到它謝謝你很多 – 2012-08-01 14:29:01

+0

@anilkumar你會請發佈一些你的代碼? – paragy 2012-08-01 16:23:09

1

在快速修復您的問題,像這樣的工作而言...

Select * From Resources Where (ResourceName = '"+ ResourceName + "' OR ResourceName IS NULL) AND (Status = '" + Status +"' OR Status IS NULL) 

但是這不是可接受的代碼片段,因爲它容易受到SQL注入的影響。實質上,假設傳入的ResourceName是

'; Drop Table Resources; -- 

您可能不需要我告訴你它做了什麼。

我的建議是始終在.Net中使用SQLCommand對象 - 在其他語言中也稱爲「Prepared Statements」。它可以防止這些類型的技巧...