我在选择命令时遇到了麻烦。场景是当我在变量中添加许多值时,我什么也没得到,但是如果我在变量中仅添加一个值,它就起作用了。
我只想运行此脚本:
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();
在第一种情况下,您的@searchKey值ist为“ 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')
由于“,”可能是您的IN-Clause值的一部分,因此不能从您的语句中隐式检查其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 );