c# - 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();
解决方案
在第一种情况下,您的 @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 值的一部分。
这是一个与解决方案类似的问题,也许你也看看这个:
推荐阅读
- xml - XML - XSL:PDF 生成,每页行数有限
- pip - 如何在默认 python 旁边安装 python3.3 的 pip
- python - 如何将 postgREST 与 Django 集成
- jenkins - 如何在 Jenkins 中删除工作区中的特定文件夹
- mapreduce - hadoop 600 秒后超时
- laravel - Laravel 中的 SQL BETWEEN 运算符
- php - 如何获取 Facebook Page Like 的总数
- python - 将框架中的所有条目小部件绑定到一个键
- java - 使用 Mockito 访问 JUnit 中测试类中的私有字段
- apache - 我有 .htaccess rewrite rure 也重写文件夹