如何在 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);
        }
    }
}

如何在 SQL 中更新表

"UPDATE Student_Course SET Mark = @Mark WHERE CID=@CID AND SID=@SID"

这应该是正确的 SQL 语句,因为您正在尝试根据人员的CIDSID更新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 keyCID/SID的值 - 必须是唯一的。

您要查找的sql是:(通过CIDSID设置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))                              
                                                                     ^^^^^^^

因为,您希望更新标记值以及 CIDSID 上的匹配项。

您之前更新了数据库中的所有条目。您收到错误:

违反主键,无法输入重复项

因为,在 CID 和 SID(可能这个被设置为您的主键(中,得到了一个以前设置的值。