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
相关产品推荐
相关产品推荐

