2013-01-15 106 views
0

我有一個SELECT語句這樣的..Select語句詳細視圖

Select * From A Join B on A.ID = B.ID 
And A.Gener = 'M' 
And A.Age = 21 
And B.School = 'Bluh' 
--- many more AND Clauses 

現在這些「AND」條款是動態的,他們將我的vb.net web應用程序中可用於構築基於用戶的選擇....

例如...

if gener.text <> "" Then 
    qry = qry & " And A.Gender='M'" 

我真的不希望建立在這樣的蒼蠅我的SQL查詢。有沒有更好地使用LINQ或其他的方法?

我的實際SQL查詢將包含多達30個動態AND(基於用戶選擇)。

請指教。

感謝

+3

Erland Sommarskog在[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html)上寫了一對很好的文章 - 如果你想推這全部歸到數據庫級別。簡短版本 - 使用現代SQL Server,您可以包含所有的子句,例如'(A.Gener = @Gener或@Gener IS NULL)',使用'RECOMPILE'選項,服務器將生成一個有效的根據'@ Gener'參數是否爲'NULL'來計劃。 –

回答

0

我會這樣改變它

Select * From A Join B on A.ID = B.ID 
And (A.Gener = @arg1 or @arg1 is null) 
And (A.Age = @arg2 or @arg2 is null) 
And (B.School = @arg3 or @arg3 is null) 

---許多越來越Clausesju

,如果你進入程序,他們將logicly忽略空值這樣 - 不知道,如果它在你的情況

definetly構建動態的TSQL查詢應用端是一個SQL注入的邀請

1

用於每個語句:

QRY = QRY & 「而(A.Gender ='」 & gender.Text & 「 'OR'」 & gender.Text &「 '=')「

+0

恐怕這不會真的爲我工作,我幾乎已經這樣做了...我將有不同的數據類型,如DATE | INT | BOOLEAN ...如果沒有指定的日期,那麼我不需要AND子句。 – highwingers