Microsoft Access数据库数据重复插入问题解决请求
数据重复插入问题的解决方案
问题根源
你的Add函数中连续调用了两次RunDml(insert):
RunDml(insert); // 第一次执行插入 if(RunDml(insert) == true) // 第二次再次执行插入
第一次调用已经完成了数据插入操作,第二次调用会重复执行相同的SQL语句,直接导致数据库中出现重复数据。
修复代码
修改Add函数,移除多余的第一次RunDml调用,仅保留一次插入操作并判断执行结果:
public string Add() { string insert = String.Format("Insert into profile Values ('{0}','{1}')", FIRSTname, LASTname); // 仅执行一次插入操作 if(RunDml(insert) == true) { return "Data added successfully !"; } else { return "Retry Again Please !"; } }
额外优化建议
当前代码使用String.Format拼接SQL语句存在SQL注入风险,同时可能因输入包含单引号等特殊字符导致SQL语法错误,建议改用参数化查询:
// 修改后的Add函数,支持参数化 public string Add() { string insert = "Insert into profile Values (@FirstName, @LastName)"; // 传递参数列表执行插入 if(RunDml(insert, new OleDbParameter("@FirstName", FIRSTname), new OleDbParameter("@LastName", LASTname)) == true) { return "Data added successfully !"; } else { return "Retry Again Please !"; } } // 修改后的RunDml函数,适配参数化查询 public bool RunDml(string statement, params OleDbParameter[] parameters) { try { Connect(); cmd = new OleDbCommand(statement, conn); cmd.Parameters.AddRange(parameters); cmd.ExecuteNonQuery(); Disconnect(); return true; } catch (OleDbException ex) { ErrorCode = ex.ErrorCode; ErrorMessage = ex.Message; return false; } }
内容的提问来源于stack exchange,提问作者paramicia
相关产品推荐
相关产品推荐

