在C#中搜索给出错误的结果

时间:2014-01-29 15:49:49

标签: c# sql-server wildcard

我有一个电子邮件文本框,通过它我可以执行搜索。如果我键入a_Scott结果是开始的电子邮件:a_Scott但我得到了  a.scott,  ajscott,  arscott。
这是我的代码:

if (!string.IsNullOrWhiteSpace(request.EmailAddress))
{
    var email = request.EmailAddress.IndexOf("*", 0, StringComparison.InvariantCulture) >= 0
                ? request.EmailAddress.RemovePercentsign().ReplaceAsterikWithPercentSign()
                : request.EmailAddress + "%";

    command.Parameters.Add(new SqlParameter("@Email", email.Trim()));
}

2 个答案:

答案 0 :(得分:6)

原因是您正在使用SQL LIKE运算符。

如果您看一下LIKE documentation,您会发现'_'字符具有特殊含义,需要像使用百分号一样进行转义。

  

_(下划线) - 任何单个字符。

要转义_字符,只需使用方括号,如[_]

所以你的查询会变成这样:

SELECT * 
FROM Users
WHERE email LIKE '%a[_]Scott%'

答案 1 :(得分:0)

这是一个用来清理理解的小提琴 http://sqlfiddle.com/#!6/d88af/4