C#SqlDataAdapter-选择命令问题

问题描述 投票:0回答:2

我在选择命令时遇到了麻烦。场景是当我在变量中添加许多值时,我什么也没得到,但是如果我在变量中仅添加一个值,它就起作用了。

我只想运行此脚本:

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# sqldataadapter selectcommand
2个回答
0
投票

在第一种情况下,您的@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个参数或多个参数。

这是一个与解决方案类似的问题,也许您也对此有所了解:

How to pass sqlparameter to IN()?


-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 );
© www.soinside.com 2019 - 2024. All rights reserved.