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

C#实现SQL员工账号插入时出现重复存储问题求助

问题原因分析与解决方案

核心问题

你遇到的重复插入问题,根源在于代码里连续调用了两次cmd.ExecuteNonQuery():

cmd.ExecuteNonQuery(); // 第一次执行INSERT,插入第一条记录
int result = cmd.ExecuteNonQuery(); // 第二次执行INSERT,插入第二条重复记录

ExecuteNonQuery()方法的作用是直接执行指定的SQL命令,每调用一次就会触发一次INSERT操作,所以两次调用就会生成两条完全相同的数据库记录。

修正后的代码

只需要保留一次ExecuteNonQuery()调用,并将其返回值赋值给result即可:

using (SqlConnection con = new SqlConnection(conString))
{
    try
    {
        string query = "INSERT INTO Tbl_Staff (Name,pos,username,password) VALUES (@name,@pos,@username,@password)";

        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@name", textBox1.Text);
            cmd.Parameters.AddWithValue("@pos", textBox4.Text);
            cmd.Parameters.AddWithValue("@username", textBox2.Text);
            cmd.Parameters.AddWithValue("@password", textBox3.Text);
            con.Open();
            // 只执行一次ExecuteNonQuery,并获取返回值
            int result = cmd.ExecuteNonQuery();

            if (result > 0)
                MessageBox.Show("Credentials has been successfully added.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

            // 清空输入框
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

小提示

调试这类数据库操作问题时,可以通过断点跟踪代码执行流程,或者临时打开MessageBox.Show(result.ToString());注释,查看返回的受影响行数——如果正常插入一条记录,result应该等于1,而之前的代码会返回两次1,也能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:03