You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于用户输入查询MySQL数据库无结果问题排查与解决

MySQL LIKE查询无结果问题排查与解决

我需要实现根据用户输入从MySQL数据库的tfilms表中查询影片的法、英文标题,但明明存在匹配数据(比如输入"ninja"应该返回3条结果),SQL查询却始终返回空结果。

初始错误代码

private void txbSearch_TextChanged(object sender, EventArgs e)
{
// The query is on several lines for greater readability.
    string query = @"        SELECT titre_fr, titre_en 
        FROM tfilms 
        WHERE titre_fr  LIKE '%@text%' 
        OR titre_en LIKE '%@text2%'";
    if (txbSearch.Text != "")
    {
        using (var databaseConn = new MySqlConnection(conn))
        {
            using (var cmd = databaseConn.CreateCommand())
            {
                cmd.CommandText = query;
                cmd.Parameters.AddWithValue("@text", txbSearch.Text);
                cmd.Parameters.AddWithValue("%@text2", txbSearch.Text);
                DataTable dataTable = new DataTable();
                using (var da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(dataTable);
                    cmd.CommandTimeout = 60;
                    databaseConn.Open();
                    MySqlDataReader reader = cmd.ExecuteReader();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                             // DO SOMETHING
                        }
                    }
                    else
                        // IT ALWAYS LAND HERE.
                }
            }
        }
    }
    else
        RefreshData();
}

问题根源

  1. SQL语句参数写法错误:LIKE '%@text%'会让数据库把%@text%当成完整的字符串字面量,而非将@text作为参数替换,相当于查询标题中包含@text字符串的记录,自然找不到匹配结果。
  2. 参数名定义错误:AddWithValue("%@text2", ...)里的参数名多了前缀%,导致无法和SQL语句中的@text2匹配,该参数实际未被正确传入。

修正后的代码

将通配符%移到参数值中,同时修正参数名:

private void txbSearch_TextChanged(object sender, EventArgs e)
{
// The query is on several lines for greater readability.
    string query = @"        SELECT titre_fr, titre_en 
        FROM tfilms 
        WHERE titre_fr  LIKE @text 
        OR titre_en LIKE @text2";
    if (txbSearch.Text != "")
    {
        using (var databaseConn = new MySqlConnection(conn))
        {
            using (var cmd = databaseConn.CreateCommand())
            {
                cmd.CommandText = query;
                // 将通配符拼接到参数值中
                cmd.Parameters.AddWithValue("@text", "%" + txbSearch.Text + "%");
                cmd.Parameters.AddWithValue("@text2", "%" + txbSearch.Text + "%");
                DataTable dataTable = new DataTable();
                using (var da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(dataTable);
                    cmd.CommandTimeout = 60;
                    databaseConn.Open();
                    MySqlDataReader reader = cmd.ExecuteReader();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                             // DO SOMETHING
                        }
                    }
                    else
                        // 不再进入这里
                }
            }
        }
    }
    else
        RefreshData();
}

修正后,参数化查询能正确将用户输入和通配符组合,匹配到数据库中包含对应关键词的记录,查询功能恢复正常。

内容的提问来源于stack exchange,提问作者Mathieu Savage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:01:27