无法使用IN子句执行MySQL查询

时间:2014-08-12 13:36:34

标签: c# mysql sql execute

我正在尝试执行一个查询,该查询从项目状态在给定列表中的数据库中读取项目列表。我写了这个查询(也使用C#):

string statesList = "(1, 2, 3, 4, 5)"; // This is built inside a function, it could include any or all of these values, e.g. (1, 3, 4);

cmd.CommandText = "SELECT p.Name, p.State_Id FROM Projects p
    WHERE p.State_Id IN @states";
cmd.Parameters.AddWithValue("@states", statesList);

当我运行此查询时,我收到此错误:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''(1, 2, 3, 4, 5)'' at line 1".

我很难过。谁能看到我错过的东西?

2 个答案:

答案 0 :(得分:2)

您误以为使用参数化查询的工作方式与字符串替换相同。生成的查询

SELECT p.Name, p.State_Id FROM Projects p WHERE p.State_Id IN (1,2,3,4,5)

您不能像在此处那样使用参数化查询。

答案 1 :(得分:1)

您生成的查询是:

SELECT p.Name, p.State_Id
FROM Projects p
WHERE p.State_Id IN ('1, 2, 3, 4, 5');

与以下内容相同:

WHERE p.State_Id = '1, 2, 3, 4, 5' <-- a single string value

如果你不关心索引,你可以做你想做的事情:

SELECT p.Name, p.State_Id
FROM Projects p
WHERE find_in_set(p.State_Id, @states) > 0

注意:你应该删除逗号之后的空格。

或者,将列表直接替换为字符串。不幸的是,我认为没有更好,更方便的解决方案。