我需要创建一个查询,其中我有三个输入:名称,姓氏和城市。
当用户只输入名称时,代码应显示具有给定名称的所有用户。如果用户输入名称和城市,则代码应显示该给定城市中具有给定名称的所有人。
在我目前的情况下,我的代码不会显示具有给定城市的给定名称的人,而是显示具有给定名称的所有人,无论城市如何。有人可以给我一些参考吗?
这是我的代码:
String filterQuery = "FROM Workers WHERE name='" + name + "'OR last_name='" + last_name + "'AND city='" + city + "'";
答案 0 :(得分:1)
尝试:
String filterQuery = "FROM Workers WHERE name like '%" + name + "%'and last_name like'%" + last_name + "%'AND city like'%" + city + "%'";
这否定了对OR的需求
答案 1 :(得分:1)
这应该是您的查询:
IN
答案 2 :(得分:1)
使用这样的方法存在一些问题 - 尤其是通常的well documented SQL注入攻击漏洞。
但是,除此之外,您需要将逻辑语句包装在一些括号中,以便正确应用AND。
e.g。
String filterQuery = "FROM Workers WHERE (name='" + name + "'OR last_name='" + last_name + "')AND city='" + city + "'";
否则,你有一个"浮动"或者,可能会对您的期望有所不同。
仍然存在更改查询形式的问题,具体取决于您提供的三个可选查询参数中的多少,但给出了3种可能的输入,这些输入只有7种可能的情况。
答案 3 :(得分:0)
添加括号(在name =之前和AND city之前的右括号)
答案 4 :(得分:0)
如果未指定条件,则需要省略条件的逻辑。这是通过指定参数具有输入的值或为null来完成的。如果您的参数是空字符串而不是空字符,则可以将@param IS NULL
切换为@param = ''
。
SELECT
...
FROM workers
WHERE
( name = @param OR @param IS NULL )
AND ( last_name = @param2 OR @param2 IS NULL )
AND ( city = @param3 OR @param3 IS NULL )
只需将上面脚本中的@param
占位符替换为输入值并存储即可。
我会注意SQL注入,因为您将输入值直接放入可能执行的字符串中。在直接在数据库中执行查询之前,请查看查询参数化和准备语句。
答案 5 :(得分:0)
只需使用如下所示的括号即可。这应该有所帮助。
String filterQuery =“FROM Workers WHERE(name ='”+ name +“')OR(last_name ='”+ last_name +“'AND city ='”+ city +“)'”;
答案 6 :(得分:0)
select * from Workers
where
(name=@name or @name='') and
(last_name=@last_name or @last_name='') and
(city=@city or @city='')
回答是MSSQL格式。我希望你能把它格式化为c#。如果有任何帮助,请告诉我