2012-03-11 83 views
2

我有一個數據集連接到MS Access數據庫。如何使用可變數量的參數的IN運算符?

我想在WHERE子句等IN操作人員使用:

WHERE DepartmentID IN (1,2,3) 

這意味着,具有1,2和3的ID的所有記錄將被過濾。但問題是我不能創建像這樣的參數:

WHERE DepartmentID IN (?) 

它只適用於WHERE DepartmentID IN(?,?,?)。這沒關係,但參數不應僅限於3個參數。

IN運算符中的值可能爲1或更多值。

如何在VB.NET中做到這一點?

+0

http://stackoverflow.com/a/337792/284240 – 2012-03-11 23:14:34

+0

我敢肯定這是重複的(但不是當前鏈接的那個......這更具語言特定性)。無論如何,訣竅是根據參數的* count *動態地生成'(?,...?)(不要在這裏放入任何數據!),然後將相同數量的參數添加到查詢。 (這是可擴展的,並防止注入攻擊。) – 2012-03-11 23:20:19

+0

[看看這個](http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause),第二個答案它真的很喜歡解決方案建議由@pst提供。 – Steve 2012-03-12 00:00:08

回答

1

IN運算符允許您在WHERE子句中指定多個值。

SQL語法

SELECT column_name(s) 
FROM table_name 
WHERE column_name IN (@value1,@value2,...) 

你可以做一個循環,而不是,但你就容易受到SQL注入

+1

-1您**可以**使用in運算符來傳遞一個值。除此之外,你不解釋如何參數化VB.NET中的'IN'子句。 – 2012-03-11 23:18:34

+0

爲什麼循環_prone到SQL注入_?只有在不使用參數的情況下才打開SQL注入,而且如果以編程方式構建這些參數(如在循環中)。 – 2012-03-12 10:27:13

+0

它會很棘手..他所要求的IN子句中的參數不是固定的,它可能是10,5或2 ..我的情況我想不出一種方法來生成參數。 – 2012-03-12 16:30:54

相關問題