C#SQL SELECT WHERE <变量>喜欢%Column%-格式?

时间:2019-05-07 14:03:03

标签: c# mysql visual-studio

当前我正在使用以下语句:

"SELECT categoryDB, number FROM " + dbName+ " WHERE titleDBColumn ='" + titleInput+ "'";

哪个可以帮助我找到类似于titleInput(这是一个来自外部的变量)的字符串。

但是,titleDBColumn中的值几乎总是比通过titleInput输入的字符串短。

示例:

titleDBColumn: Streetcar
titleInput: TheStreetCarIOwn

现在很明显,我需要在另一个方向上使用LIKE运算符才能获得所需的结果,但我无法正确获取格式。有任何想法吗? 对不起,如果我不清楚。

2 个答案:

答案 0 :(得分:1)

这对我有用:

"SELECT categoryDB, number FROM " + dbName + " WHERE '" +
titleInput + "' like '%' + titleDBColumn + '%'";

答案 1 :(得分:0)

生成的SQL必须是

SELECT categoryDB, number
FROM tableName
WHERE 'input' LIKE '%' + titleDBColumn + '%'

%通配符的意思是“任意数量的任何字符”。也就是说,'input' LIKE '%' + titleDBColumn + '%'表示输入文本可以在列文本之前和之后包含字符。

此外,您应尽可能使用命令参数。对于您名为dbName的表名,这是不可能的。如果此名称是在代码中定义的,而不是用户输入的,则可以像您一样安全地进行连接。但是要采取其他措施来防止SQL注入。

string sql = "SELECT categoryDB, number FROM `" + dbName +
         "` WHERE @input LIKE '%' + titleDBColumn + '%'";
using (var conn = new MySqlConnection(connStr)) {
    var cmd = new MySqlCommand(sql, conn);
    cmd.Parameters.AddWithValue("@input", titleInput);

    conn.Open();
    var reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        ...
    }
}