2016-08-03 13 views
-1

SQLデータベース内のテーブルStudent_Courseを更新しようとすると、それが実行されますが、私は、私は本当にただマーク値を更新する必要がありますが、CID(コースID)およびSIDにそれを一致させる必要がSQLでテーブルを更新するには?

Violation of Primary Key, Cannot enter duplicate

を得続けますあなたはCID &に基づいてStudent_Course表にMarkフィールドを更新しようとしているため(学生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 [email protected], [email protected] , [email protected]", 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); 
     } 
    } 
} 
+2

理由がない2つのダウン投票?これは初心者の質問かもしれませんが、それについても彼を導くのは私たちの責任です:) –

+0

いくつかの基準で更新する必要があります。 'UPDATE [TABLE] SET [COLUMN] = WHERE [COLUMN] = 'です。それ以外の場合は、テーブルのすべての行を ''に渡します。 –

答えて

1

前に行ったことは、 CID/SIDの値はprimary keyです。これは一意である必要があります。

あなたが探しているSQLは次のとおりです。

UPDATE Student_Course 
SET [email protected] 
WHERE [email protected] AND [email protected] 

とコードで(CIDSIDMark設定):

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    using (SqlConnection con = new SqlConnection(cs)) 
    { 
     try 
     { 
      using (var cmd = new SqlCommand("UPDATE Student_Course SET [email protected] WHERE [email protected] AND [email protected]", 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); 
     } 
    } 
} 
2

あなたのSQL文は、データベース内のすべてのエントリを更新します行ごとに同じSIDとCIDを設定します。それがエラーを起こす理由です。

"UPDATE Student_Course SET [email protected], [email protected] , [email protected]" 

CIDとSIDマッチ使用特定の行を更新するために:あなたはあなたのクエリを変更する必要が

"UPDATE Student_Course SET [email protected] WHERE [email protected] AND [email protected]" 
0

using (var cmd = new SqlCommand("UPDATE Student_Course SET [email protected], [email protected] , [email protected]", con)) 

へ(WHERE句を使用)

using (var cmd = new SqlCommand("UPDATE Student_Course SET [email protected] WHERE [email protected] AND [email protected]", con))        
                    ^^^^^^^ 

マーク値をCIDSIDに一致させて更新したかったので、

以前にデータベースのすべてのエントリを更新しました。

CIDとSID のうち、(おそらく、このいずれかがあなたの主キーとして設定された)、以来

Violation of Primary Key, Cannot enter duplicate

が予め設定された値を得た:そのためにエラーが発生しました。

関連する問題