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

数据库删除操作报错:Incorrect syntax near '=' 求助

问题排查与解决方法

首先来看你遇到的System.Data.SqlClient.SqlException: "Incorrect syntax near '='"错误,主要有两个核心问题:

1. SQL语句拼接的语法错误

你生成删除语句的代码是:

string sql_text = "DELETE FROM Bericht_Table WHERE Name=" + this.NameEingabe.Text.ToString();

这里有两个致命隐患:

  • 如果NameEingabe.Text是空值,最终SQL会变成DELETE FROM Bericht_Table WHERE Name=,直接导致语法不完整,数据库解析时就会报错Incorrect syntax near '='。
  • 即使输入有值,比如输入"Mercedes",生成的SQL是DELETE FROM Bericht_Table WHERE Name=Mercedes——字符串类型的字段值必须用单引号包裹,数据库会把Mercedes当成列名而非字符串值,同样会引发语法错误。

2. db_execute方法的代码错误

你的db_execute方法里存在明显的逻辑错误:

SqlCommand cmd = new SqlCommand(cn_string,cn);

SqlCommand的第一个构造参数应该是要执行的SQL语句,而你传入的是连接字符串cn_string,这意味着你实际执行的是连接字符串内容,完全不符合预期。另外你创建的SqlDataAdapter也没有被使用,属于冗余代码。


修正后的代码方案

首先修复db_execute方法(使用参数化查询+using自动释放资源)

private int db_execute(string sql_text, SqlParameter[] parameters = null) 
{
    string cn_string = Properties.Settings.Default.Fahrzeug_DatenbankConnectionString;
    // using语句自动管理连接生命周期,避免资源泄漏
    using (SqlConnection cn = new SqlConnection(cn_string))
    {
        cn.Open();
        using (SqlCommand cmd = new SqlCommand(sql_text, cn))
        {
            // 传入参数支持参数化查询
            if (parameters != null)
            {
                cmd.Parameters.AddRange(parameters);
            }
            return cmd.ExecuteNonQuery();
        }
    }
}

然后修改Delet方法,使用参数化查询替代字符串拼接

private void Delet() 
{
    Fahrzeug row = mainGrid.SelectedItem as Fahrzeug;
    // 增加选中为空的判断,避免空引用异常
    if (row == null || string.IsNullOrWhiteSpace(this.NameEingabe.Text))
    {
        // 可选:添加提示,比如MessageBox.Show("请选择条目并输入名称");
        return;
    }
    
    // 参数化SQL,避免语法错误和SQL注入
    string sql_text = "DELETE FROM Bericht_Table WHERE Name = @Name";
    SqlParameter[] parameters = new SqlParameter[]
    {
        new SqlParameter("@Name", this.NameEingabe.Text)
    };
    
    db_execute(sql_text, parameters);
    LadeAusDerDatenbank();
}

额外建议

  • 增加异常捕获:可以在db_execute或者调用处添加try-catch块,处理数据库操作中可能出现的异常,给用户更友好的提示。
  • 验证输入:对NameEingabe.Text做合法性校验,比如过滤特殊字符、判断非空等,提升程序稳定性。

内容的提问来源于stack exchange,提问作者Adham El Khaled

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:36:41