如何使用用户输入和通配符编写SQL查询

时间:2010-03-22 22:57:10

标签: c# sql sqlite ado.net

通常我将where语句写为WHERE key=@0然后添加一个参数。现在我希望用户特定一些字母,例如'oat',并希望在它周围贴上通配符%oat%,它与'涂层'相匹配。那么我如何编写查询,以便通配符围绕用户输入('seachword')。

现在让我们更进一步。我不希望用户写%,所以他不能做blah%ing。也许%是句子的一部分(或者它可能是非法的,但我更喜欢它是句子的一部分)。如何将我的通配符放在单词或句子周围,并禁止用户在他的单词之间加上通配符? (并且最好使该部分成为句子的一部分)

C#ado.net sql / sqlite

3 个答案:

答案 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 '\'