如何在C#命令中使用LIKE运算符?

4

我需要将一个字符串插入到Sql命令中。

search.CommandText = "SELECT * FROM Contacts WHERE Name like ' + @person + % + '";

在命令中使用 LIKE 的正确方式是什么?


3
你使用哪种关系型数据库管理系统?MySQL,SQLServer,...? - John Woo
10个回答

5

应该是:

SELECT * FROM Contacts WHERE Name like @person + '%'

@person 是一个参数 - 你不需要在它周围加上单引号。你只需要将其与 % 连接,而 % 应该有引号。

请记住:

  • 你可以保持 "SELECT * FROM Contacts WHERE Name like @person",并且参数值中包含 %(在 C# 中连接更简单易懂)。
  • 你可能还想转义字符串中已经存在的其他通配符字符:%_[]

3

使用语法:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

"%"符号可用于在模式前后定义通配符(模式中缺少的字母)。

例如:

  • LIKE '%xy'将获取以'xy'结尾的任何内容。
  • LIKE '%xy%'将获取包含'xy'的任何内容。
  • LIKE 'xy%'将获取以'xy'开头的任何内容。

2

这是您的意思吗?

searchPerson.CommandText = "SELECT * FROM Contacts WHERE Name LIKE '"+person+"%'";

1
这可能会受到SQL注入攻击!哦,天哪! - Kobi
嘿嘿,是的。在回答中可能应该提到这一点。我会使用“让它工作,然后修复安全性”的借口 :) - Shadow
这就是为什么我使用了参数,哈哈 - user1667459

1
searchPerson.CommandText =  
   "SELECT * FROM Contacts WHERE Name like @person + '%'"

0

仅供参考!

 string strQuery = "select Ac_Key from AccountDetails where (Ac_Name like '%'+@Ac_Name+'%');
 SqlCommand cmb1 = new SqlCommand(strQuery);
 cmb1.Parameters.AddWithValue("@Ac_Name", AccountName);
      

0
searchPerson.CommmandText = "SELECT * FROM Contacts WHERE Name like '" + @person + "%'";

除非实际上有一个名为“person”的变量,否则这段代码可能无法编译。(巧合的是,在C#标识符之前使用@是有效的 - 真幸运!)无论哪种方式 - 将参数化命令更改为潜在的安全风险:http://en.wikipedia.org/wiki/SQL_injection - Kobi

0
select * from Contacts WHERE Name like '%' + '"+@person+"' + '%' 
select * from Contacts WHERE Name like '%' + '"+@person+"' 
select * from Contacts WHERE Name like '"+@person+"' + '%'

0

这应该可以工作

"Select *  from customer where FirstName LIKE '"+TextBox1.Text + '%'+ "'   ";

0
如果字段类型是Nvarchar,请使用此代码:

   "select * from Contacts where name like N'%"+person+"%'"

-1

"SELECT * FROM table_name like concat(@persons,'%')"

我用过它。


1
嗨,欢迎来到StackOverflow。感谢您的回答,但比“我用了它”更详细的解释会更好。 - Regis Portalez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接