通常我将where语句写为WHERE key=@0
然后添加一个参数。现在我希望用户特定一些字母,例如'oat',并希望在它周围贴上通配符%oat%
,它与'涂层'相匹配。那么我如何编写查询,以便通配符围绕用户输入('seachword')。
现在让我们更进一步。我不希望用户写%,所以他不能做blah%ing。也许%是句子的一部分(或者它可能是非法的,但我更喜欢它是句子的一部分)。如何将我的通配符放在单词或句子周围,并禁止用户在他的单词之间加上通配符? (并且最好使该部分成为句子的一部分)
C#ado.net sql / sqlite
答案 0 :(得分:3)
如果你使用prepared statements(即SQLiteCommand,DbCommand的子类),这将由你来处理。 E.g:
using (SqlCommand myCommand = new SQLiteCommand("SELECT * FROM TABLE WHERE (COLUMN LIKE = '%' + @input + '%')"))
{
myCommand.Parameters.AddWithValue("@input", input);
// ...
}
另请参阅此类previous question。
答案 1 :(得分:1)
继续使用param,但在绑定之前在param中添加通配符。
C#:
param = '%' + Regex.Replace(param, @"[%?]", String.Empty) + '%'
SQL:
select * from ... where key like :param
答案 2 :(得分:1)
RE:我如何将我的通配符放在单词或句子周围,并禁止用户在他的单词之间加上通配符? (并且最好使该部分成为句子的一部分)
我认为您需要使用%
替换任何\%
用户耗材并使用
LIKE @Expression ESCAPE '\'