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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:31:15