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

C# dataGridView点击删除按钮执行行删除操作报错原因排查

问题说明

选中DataGridView控件内待删除行执行删除操作时触发运行报错,原有实现代码如下:

private void button3_Click(object sender, EventArgs e)
{
    con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\desk\new\abusalem\abusalem\Database1.mdf;Integrated Security=True");
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "delete from datauser where id= "+dataGridView1.CurrentRow.Cells[0].Value;
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    filltable();
}

错误截图

常见触发原因
  • 未做空值校验:当DataGridView没有选中任何行、点击到控件空白区域、选中底部默认新增空白行时,dataGridView1.CurrentRow会返回null,直接访问其下的Cells属性会直接抛出空引用异常。
  • SQL拼接语法错误:直接将单元格值拼接到SQL语句中,如果id字段为字符类型但拼接时未加单引号、或者单元格值为DBNull,会生成非法SQL语句,执行时抛出数据库语法错误。
  • 全局对象复用隐患:代码中cmd为全局复用的SqlCommand对象,若前一次操作出现异常未重置连接、参数配置,会出现连接占用、参数残留问题,触发执行错误。
  • 资源未正确释放:SqlConnection、SqlCommand属于非托管资源,原有写法如果执行SQL阶段抛出异常,连接不会被主动关闭,后续会出现连接池占满的问题。
修复后代码
private void button3_Click(object sender, EventArgs e)
{
    // 校验是否选中有效数据行
    if (dataGridView1.CurrentRow == null || dataGridView1.CurrentRow.Index == dataGridView1.NewRowIndex)
    {
        MessageBox.Show("请先选择需要删除的有效数据行");
        return;
    }
    // 校验ID值有效性
    object rowId = dataGridView1.CurrentRow.Cells[0].Value;
    if (rowId == DBNull.Value || string.IsNullOrWhiteSpace(rowId.ToString()))
    {
        MessageBox.Show("当前选中行ID无效,无法执行删除");
        return;
    }
    // using语法块自动释放资源,避免连接泄漏
    using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\desk\new\abusalem\abusalem\Database1.mdf;Integrated Security=True"))
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection = con;
        cmd.CommandType = CommandType.Text;
        // 参数化查询,避免SQL注入和语法拼接错误
        cmd.CommandText = "DELETE FROM datauser WHERE id = @id";
        cmd.Parameters.AddWithValue("@id", rowId);
        con.Open();
        cmd.ExecuteNonQuery();
    }
    // 刷新表格数据
    filltable();
}

内容的提问来源于stack exchange,提问作者Ibrahim Abo-salim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:48:29