如何在 SQL 中更新表
本文关键字:更新 SQL | 更新日期: 2023-09-27 17:59:47
尝试更新 SQL 数据库中的表Student_Course,它正在运行,但我不断得到
违反主键,无法输入重复项
我真的只需要更新分数值,但需要将其与 CID(课程 ID(和 SID(学生 ID(匹配
private void btnAdd_Click(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection(cs))
{
try
{
using (var cmd = new SqlCommand("UPDATE Student_Course SET CID=@CID, SID=@SID , Mark=@Mark", con))
{
cmd.Connection = con;
con.Open();
cmd.Parameters.AddWithValue("@CID", cboCID.GetItemText(cboCID.SelectedItem));
cmd.Parameters.AddWithValue("@SID", cboSID.GetItemText(cboSID.SelectedItem));
cmd.Parameters.AddWithValue("@Mark", Convert.ToInt32(txtMark.Text));
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Mark Added");
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error during insert: " + ex.Message);
}
}
}
"UPDATE Student_Course SET Mark = @Mark WHERE CID=@CID AND SID=@SID"
这应该是正确的 SQL 语句,因为您正在尝试根据人员的CID
和SID
更新Student_Course
表中的Mark
字段。
SQL 语句 更新数据库中的所有条目,并为每一行设置相同的 SID 和 CID。这就是您收到错误的原因。
"UPDATE Student_Course SET CID=@CID, SID=@SID , Mark=@Mark"
要更新使用 CID 和 SID 匹配的特定行,请执行以下操作:
"UPDATE Student_Course SET Mark=@Mark WHERE CID=@CID AND SID=@SID"
您之前所做的是set
您拥有primary key
的CID
/SID
的值 - 必须是唯一的。
您要查找的sql是:(通过CID
和SID
设置Mark
(
UPDATE Student_Course
SET Mark=@Mark
WHERE CID=@CID AND SID=@SID
在代码中:
private void btnAdd_Click(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection(cs))
{
try
{
using (var cmd = new SqlCommand("UPDATE Student_Course SET Mark=@Mark WHERE CID=@CID AND SID=@SID", con))
{
cmd.Connection = con;
con.Open();
cmd.Parameters.AddWithValue("@CID", cboCID.GetItemText(cboCID.SelectedItem));
cmd.Parameters.AddWithValue("@SID", cboSID.GetItemText(cboSID.SelectedItem));
cmd.Parameters.AddWithValue("@Mark", Convert.ToInt32(txtMark.Text));
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Mark Added");
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error during insert: " + ex.Message);
}
}
}
您需要更改查询:
using (var cmd = new SqlCommand("UPDATE Student_Course SET CID=@CID, SID=@SID , Mark=@Mark", con))
(使用 WHERE
子句(:
using (var cmd = new SqlCommand("UPDATE Student_Course SET Mark=@Mark WHERE CID=@CID AND SID=@SID", con))
^^^^^^^
因为,您希望更新标记值以及 CID 和 SID 上的匹配项。
您之前更新了数据库中的所有条目。您收到错误:
违反主键,无法输入重复项
因为,在 CID 和 SID(可能这个被设置为您的主键(中,得到了一个以前设置的值。