DataGridView与WHERE LIKE查询配合失效问题求助
问题解决:TableAdapter模糊查询LIKE规则失效
问题根源
你当前的SQL写法WHERE (name LIKE '%' + @Param1 + '%')在TableAdapter中无法正常工作,是因为参数化查询的机制导致通配符和参数的拼接没有被正确解析。当通过代码传递参数时,@Param1会被当作完整的字符串值处理,最终让LIKE变成了精确匹配逻辑。
两种可行解决方案
方案1:在代码中传递带通配符的参数
先修改SQL查询语句,去掉语句内的通配符拼接:
SELECT id, name, [desc], price FROM tableInventory WHERE name LIKE @Param1
然后在VB代码调用时,给输入文本手动加上通配符:
InventoryTableAdapter.SearchInventory(InventoryDataSet.inventoryTable, "%" & txtSearch.Text & "%")
这种方式让参数本身包含完整的模糊匹配规则,TableAdapter执行时会正确识别LIKE的模糊逻辑。
方案2:在SQL语句中用CONCAT函数拼接通配符
如果不想修改代码的传参逻辑,可以修改SQL语句,使用SQL Server的CONCAT函数来拼接通配符和参数:
SELECT id, name, [desc], price FROM tableInventory WHERE name LIKE CONCAT('%', @Param1, '%')
如果要兼容空参数场景(比如用户未输入搜索内容时匹配所有数据),可以加上ISNULL处理空值:
SELECT id, name, [desc], price FROM tableInventory WHERE name LIKE CONCAT('%', ISNULL(@Param1, ''), '%')
这样即使@Param1为NULL,也会拼接成%%,实现全量数据匹配。
验证效果
修改后,不管是用Preview Data测试,还是通过代码调用SearchInventory方法,都能正常触发模糊搜索,不再局限于精确匹配。
内容的提问来源于stack exchange,提问作者Nessun Rdz
相关产品推荐
相关产品推荐

