如何通过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
相关产品推荐
相关产品推荐

