首页 > 解决方案 > C# SqlDataAdapter - 选择命令关注点

问题描述

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

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

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

标签: c#sqldataadapterselectcommand

解决方案


在第一种情况下,您的 @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()?


推荐阅读