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

如何通过WebService同步删除GridView行与SQL数据库数据?

问题:点击删除按钮仅删除GridView行,无法删除SQL数据库数据

我希望点击删除按钮时,同时删除GridView中的行与SQL数据库中的对应数据,但目前代码仅能删除GridView行,无法删除SQL数据库数据。怀疑未正确使用web方法eliminarTarea,请问我哪里出错了?

按钮点击事件代码

try
{
    if (MessageBox.Show("¿Está seguro de querer eliminar esta nota?","Message",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
    {
        int rows = DataGVTareas.RowCount;
        for(int i = rows - 1; i >= 0; i--)
        {
            if (DataGVTareas.Rows[i].Selected) 
            {
                ServiceMantenedorCliente.WebServiceMantenedorClienteSoapClient auxNegocio = new ServiceMantenedorCliente.WebServiceMantenedorClienteSoapClient();
                auxNegocio.webEliminarTarea(titulotareasDataGridViewTextBoxColumn.ToString());
                tareasBindingSource.RemoveAt(DataGVTareas.Rows[i].Index);
            }
        }
    }
    if (String.IsNullOrEmpty(this.DataGVTareas.ToString()))
    {
        MessageBox.Show("No hay datos por eliminar ", "NoteIt", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
    else
    {
        MessageBox.Show("Los datos han sido eliminados", "NoteIt", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}
catch (Exception ex)
{
    MessageBox.Show("Se ha producido un error inesperado, por favor reinicie la aplicación e intente nuevamente" + ex.Message, "NoteIt", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

应用层删除方法代码

public void eliminarTarea(String titulo_tareas)
{
    this.ConexionTareas();
    this.Conec1.CadenaSQL = "DELETE FROM " + this.Conec1.NombreTabla
                            + " WHERE titulo_tareas = '" + titulo_tareas + "';";
    this.Conec1.EsSelect = false;
    this.Conec1.Conectar();
}

WebService方法代码

[WebMethod]
public void webEliminarTarea(String titulo_tareas)
{
    NegocioNotas auxNegocio = new NegocioNotas();
    auxNegocio.eliminarCliente(titulo_tareas);
}
错误分析及修复方案
  • 参数传递错误:按钮事件中调用webEliminarTarea时,传的是列控件的字符串表示,不是选中行的实际标题值。应改为获取选中行对应单元格的值:

    string titulo = DataGVTareas.Rows[i].Cells["titulo_tareas"].Value.ToString();
    auxNegocio.webEliminarTarea(titulo);
    
  • WebService方法调用错误:webEliminarTarea里调用了eliminarCliente,但业务层实际的删除方法是eliminarTarea,方法名写错了,修正为:

    auxNegocio.eliminarTarea(titulo_tareas);
    
  • SQL注入风险:业务层直接拼接SQL语句,存在安全隐患,改用参数化查询:

    this.Conec1.CadenaSQL = $"DELETE FROM {this.Conec1.NombreTabla} WHERE titulo_tareas = @Titulo;";
    // 根据你的数据库操作类添加参数,示例:
    this.Conec1.AgregarParametro("@Titulo", titulo_tareas);
    
  • 提示逻辑错误:String.IsNullOrEmpty(this.DataGVTareas.ToString())无法判断GridView是否为空,改为检查行数:

    if (DataGVTareas.Rows.Count == 0)
    {
        MessageBox.Show("No hay datos por eliminar ", "NoteIt", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:55:18