2012-04-29 76 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可以注射。 –