0

我的选择命令有问题。这种情况是,当我在变量中放入许多值时,我什么也没得到,但如果我只在变量中放入一个值,它就可以工作。

我想要的只是运行这个脚本:

SELECT * 
FROM gsm00 a 
INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001','0002')

这是我的示例代码:

string val= "0001" - this is working

//string val= "0001,0002"- 这不起作用

query = "SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN (@searchKey)";

MySqlDataAdapter dataAdapter = new MySqlDataAdapter(query, dbconfig.conn);
dataAdapter.SelectCommand.Parameters.AddWithValue("@searchKey", val);
dataAdapter.Fill(dataTable);
dataAdapter.Dispose();
4

2 回答 2

0

在第一种情况下,您的 @searchKey 值是“0001”,这意味着您的语句看起来像

SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001')

这是有效的,因为它是 1 个参数,并且内部参数处理是在它周围加上单引号。

秒的情况如下所示:

SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001,0002')

但它必须看起来像

SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001','0002')

如果它的 1 个参数或多个参数,则不能隐式地从您的语句中检查它,因为“,”可以是您的 IN-Clause 值的一部分。

这是一个与解决方案类似的问题,也许你也看看这个:

如何将 sql 参数传递给 IN()?

于 2020-04-07T10:38:30.520 回答
-1

尝试:

query = "SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ({@searchKey})";
...
var a = new string [] {"0001", "0002" } ;
dataAdapter.SelectCommand.AddArrayParameters("@searchKey", a );
于 2020-04-07T10:30:12.100 回答