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

C#删除SQL Server中DataGrid选中行遇SQL语法错误求助

三次报错核心原因

  • 第一次报错原因:
    1. 拼写错误:Gaz = = 多写了一个等号
    2. 语法缺漏:ÜrünNo = '"+ urunno +"'AND Güç 拼接语句时闭合引号后没有加空格就直接跟AND关键字,SQL无法识别
    3. 传值错误:最后[Not]= '"+ noz +"' 错误把noz变量作为Not字段的值,应该用你定义的not变量
    4. 额外风险:字符串拼接SQL容易引发SQL注入,遇到带单引号的内容会直接触发语法错误
  • 第二次报错原因:
    1. SQL WHERE子句的多个筛选条件不能用逗号分隔,必须用AND/OR这类逻辑运算符连接
    2. DELETE语句标准语法是DELETE FROM 表名,你这里漏写了FROM关键字
  • 第三次报错原因:
    完全不符合T-SQL语法规范,WHERE子句不能先列所有字段再用逗号对应值,LIKE是单字段匹配运算符,不能批量匹配多字段值。

修正后可用代码

private void VeriSİL()
{
    // 先判断有没有选中行,避免空引用报错
    if (cwGrid.CurrentRow == null || cwGrid.CurrentRow.IsNewRow)
    {
        MessageBox.Show("请先选中要删除的行");
        return;
    }
    // 使用using自动释放连接和命令对象资源,替换成你自己的数据库连接字符串
    using (SqlConnection baglan = new SqlConnection("你的数据库连接字符串"))
    {
        try
        {
            baglan.Open();
            // 条件全部用AND连接,参数化写法避免注入和语法问题
            string sql = @"DELETE FROM CW 
                          WHERE Beğeni = @bgn 
                          AND [1.Malz] = @m1 
                          AND [2.Malz] = @m2 
                          AND [3.Malz] = @m3 
                          AND Kaynaktürü = @kturu 
                          AND [1/mm] = @m1m 
                          AND [2/mm] = @m2m 
                          AND [3/mm] = @m3m 
                          AND ÜrünNo = @urunno 
                          AND Güç = @guc 
                          AND Hız = @hiz 
                          AND Odak = @odk
                          AND Gaz = @gaz 
                          AND Açı = @aci 
                          AND Nozzle = @noz 
                          AND Süre = @sur 
                          AND Foto = @foto 
                          AND [Not] = @not";
                          
            SqlCommand komut = new SqlCommand(sql, baglan);
            komut.Parameters.AddWithValue("@bgn", cwGrid.CurrentRow.Cells[0].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@m1", cwGrid.CurrentRow.Cells[1].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@m2", cwGrid.CurrentRow.Cells[2].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@m3", cwGrid.CurrentRow.Cells[3].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@kturu", cwGrid.CurrentRow.Cells[4].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@m1m", cwGrid.CurrentRow.Cells[5].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@m2m", cwGrid.CurrentRow.Cells[6].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@m3m", cwGrid.CurrentRow.Cells[7].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@urunno", cwGrid.CurrentRow.Cells[8].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@guc", cwGrid.CurrentRow.Cells[9].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@hiz", cwGrid.CurrentRow.Cells[10].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@odk", cwGrid.CurrentRow.Cells[11].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@gaz", cwGrid.CurrentRow.Cells[12].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@aci", cwGrid.CurrentRow.Cells[13].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@noz", cwGrid.CurrentRow.Cells[14].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@sur", cwGrid.CurrentRow.Cells[15].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@foto", cwGrid.CurrentRow.Cells[16].Value?.ToString() ?? DBNull.Value.ToString());
            komut.Parameters.AddWithValue("@not", cwGrid.CurrentRow.Cells[17].Value?.ToString() ?? DBNull.Value.ToString());
            
            komut.ExecuteNonQuery();
            MessageBox.Show("Silme İşlemi Başarılı.");
            // 此处可添加DataGrid重新绑定数据源的代码,刷新显示最新数据
        }
        catch (Exception ex)
        {
            MessageBox.Show("删除失败:" + ex.Message);
        }
    }
}

private void silButton_Click(object sender, EventArgs e)
{
    VeriSİL();
}

优化建议

如果你的CW表有主键字段,完全不需要匹配所有字段作为删除条件,只用主键作为唯一筛选条件即可,逻辑更简单也不会出现误删同值其他行的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:57:01