2012-04-29 117 views
2

我有一個返回2條記錄(在DataSet的查詢生成器)以下查詢將參數傳遞給SQL select語句IN子句很奇怪。

SELECT  EmpID, Name, id 
FROM   Users 
WHERE  (CAST(id AS Varchar(20)) IN ('5688','5689')) 

現在,如果我這樣做從後面的代碼傳遞參數,而不是相同的查詢:字符串PARAM =「‘5688’,」 5689' 「;它返回null。

WHERE  (CAST(id AS Varchar(20)) IN (@param)) 

我試着脫掉第一個也是最後一個',但那並沒有什麼不同。

!!! id是一個獨特的PK!

任何人都有線索?

+0

能否請您發佈包含指定參數的代碼? – Lion

回答

3

我找到的解決方案非常簡單,它的工作原理類似於魅力,不需要sps或其他功能;

SQL:

SELECT whatever 
FROM whatever 
WHERE (PATINDEX('%''' + CAST(id AS Varchar(20)) + '''%', @param) > 0) 

C#:

String param = "'''1234'',''4567'''"; 
dataTable1 = tableAdapter1.getYourValues(param); 
+1

這裏有一個非常全面的討論如何做到這一點。 http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause/337792 –

+0

不錯的一個和良好的工作馬克 – Jake

+0

@Jake:你的C#代碼不起作用。 – Praveen

0

('5688','5689')是一組值。

定義String param = "'5688','5689'";並使用它作爲(@param)使得('5688','5689')成爲一個字符串。哪個不行。

0

Bibhas是正確的。對我來說這工作:

string param="'1234','4567'";我們不能使用參數作爲SQL參數(@參數)。

command = new SqlCommand("SELECT * FROM table WHERE number IN (" + param + ")", connection);

command.ExcecuteReader();

+0

您可以直接將值附加到SQL中,但我們嘗試通過參數傳遞值。在我看來你的SQL可以注射。 –