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

MariaDB抛出MySqlException:SQL语法错误的原因及解决方法?

MySQL语法错误异常的含义与解决方案

异常含义

这个MySqlException属于SQL语法错误,错误提示里的near '= 'a'%'明确指向问题:

  • LIKE本身是模糊匹配的比较运算符,你多写了一个多余的=,导致语法结构混乱
  • 直接在参数@name后拼接%的写法不符合参数化查询规则,数据库无法正确解析这条SQL语句

解决方法

1. 修正SQL核心语法错误

去掉LIKE后的=,并通过正确方式处理通配符%,推荐两种可靠写法:

  • 在参数值中拼接通配符
  • 在SQL语句里用CONCAT函数拼接参数与通配符

2. 修正后的代码示例

方式一:参数值拼接通配符

public void searchProduct(DataGridView data, TextBox searchString)
{
    connection.Open();
    // 移除LIKE后的=,SQL中仅保留参数占位符
    MySqlDataAdapter da = new MySqlDataAdapter("Select id, productName, productType, productQuantity, productPurchasePrice, productPurchaseDate, productSalePrice, productTax from products where productName like @name", connection);
    // 在参数值中加入%,实现前缀模糊匹配
    da.SelectCommand.Parameters.AddWithValue("@name", $"{searchString.Text}%");
    DataTable dt = new DataTable();
    da.Fill(dt);
    data.DataSource = dt;
    connection.Close();
}

方式二:SQL中使用CONCAT函数

public void searchProduct(DataGridView data, TextBox searchString)
{
    connection.Open();
    // 移除LIKE后的=,用CONCAT拼接参数和通配符
    MySqlDataAdapter da = new MySqlDataAdapter("Select id, productName, productType, productQuantity, productPurchasePrice, productPurchaseDate, productSalePrice, productTax from products where productName like CONCAT(@name, '%')", connection);
    da.SelectCommand.Parameters.AddWithValue("@name", searchString.Text);
    DataTable dt = new DataTable();
    da.Fill(dt);
    data.DataSource = dt;
    connection.Close();
}

额外优化建议

用using语句管理数据库资源,避免连接未关闭或资源泄漏:

public void searchProduct(DataGridView data, TextBox searchString)
{
    using (var conn = new MySqlConnection(connection.ConnectionString))
    {
        conn.Open();
        using (MySqlDataAdapter da = new MySqlDataAdapter("Select id, productName, productType, productQuantity, productPurchasePrice, productPurchaseDate, productSalePrice, productTax from products where productName like CONCAT(@name, '%')", conn))
        {
            da.SelectCommand.Parameters.AddWithValue("@name", searchString.Text);
            DataTable dt = new DataTable();
            da.Fill(dt);
            data.DataSource = dt;
        }
    }
}

内容的提问来源于stack exchange,提问作者Kamil MERT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:20:59