C# SqlDataAdapter - Select 命令问题

C# SqlDataAdapter - Select Command Concern

我的 select 命令有问题。场景是当我在我的变量中放入很多值时我什么也得不到但是如果我只在变量中放入一个值它正在工作。

我只想运行这个脚本:

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();

尝试:

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 );

在第一种情况下,您的@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 值的一部分。

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

How to pass sqlparameter to IN()?