C# 如何使用用户输入和通配符编写sql查询

C# 如何使用用户输入和通配符编写sql查询,c#,sql,sqlite,ado.net,C#,Sql,Sqlite,Ado.net,通常我将where语句写成where key=@0,然后添加一个参数。现在,我希望用户指定几个字母,例如“oat”,并希望在其周围添加与“coating”匹配的通配符%oat%。那么,如何编写查询,以便在用户输入“seachword”时使用通配符呢 现在让我们更进一步。我不希望用户写入%s,因此他无法执行无聊的%ing操作。也许%是句子的一部分,或者它可能是完全非法的,但我更喜欢它是句子的一部分。如何在单词或句子周围放置通配符,并禁止用户在单词之间放置通配符?最好让%成为句子的一部分 C ado

通常我将where语句写成where key=@0,然后添加一个参数。现在,我希望用户指定几个字母,例如“oat”,并希望在其周围添加与“coating”匹配的通配符%oat%。那么,如何编写查询,以便在用户输入“seachword”时使用通配符呢

现在让我们更进一步。我不希望用户写入%s,因此他无法执行无聊的%ing操作。也许%是句子的一部分,或者它可能是完全非法的,但我更喜欢它是句子的一部分。如何在单词或句子周围放置通配符,并禁止用户在单词之间放置通配符?最好让%成为句子的一部分


C ado.net sql/sqlite继续使用参数,但在绑定之前在参数中添加通配符

C:

SQL:


RE:如何在单词或句子周围放置通配符,并禁止用户在单词之间放置通配符?最好让%成为句子的一部分

我认为您需要将用户提供的任何%替换为\%并使用

如果您使用的子类,即SQLiteCommand,这将为您解决。例如:

using (SqlCommand myCommand = new SQLiteCommand("SELECT * FROM TABLE WHERE (COLUMN LIKE = '%' + @input + '%')"))
{
        myCommand.Parameters.AddWithValue("@input", input);
        // ...
}
另见类似的例子

select * from ... where key like :param
LIKE @Expression ESCAPE '\'
using (SqlCommand myCommand = new SQLiteCommand("SELECT * FROM TABLE WHERE (COLUMN LIKE = '%' + @input + '%')"))
{
        myCommand.Parameters.AddWithValue("@input", input);
        // ...
}