Во-первых, вы не ОБНОВЛЯЕТе student_subject.
Поскольку в таблице subject_bsit нет столбца student_id, вы не можете связать оценку со студентом.
ОБНОВЛЕНИЕ subject_bsit
Установить оценку = @grade
Где subject_ID = @ subject_ID
Это сделало бы то же самое.
Это схема, которую я предлагаю.
1010 * Студенты *
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| studentID | int(11) | NO | PRI | NULL | auto_increment |
| studentName | varchar(100) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
классы
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| studentID | int(11) | NO | PRI | NULL | |
| subjectID | int(11) | NO | PRI | NULL | |
| grade | decimal(3,2) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
Два иностранных ключа
grades.studentID (FK) <- Students.studentID (PK) </p>
grades.subjectID (FK) <- subjects.subjectID (PK) </p>
Обратите внимание, что таблица оценок содержит составной ключ, состоящий из 2 полей.
предметы
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| subjectID | int(11) | NO | PRI | NULL | auto_increment |
| subjectName | varchar(100) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Пожалуйста, всегда используйте параметры при связи с базой данных. Это поможет защитить вашу базу данных от Sql Injection.
Блоки Использование закрывают и удаляют объекты базы данных даже в случае ошибки.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim query As String = "Update grades
Set grade = @grade
Where studentId = @studentId And subjectID = @subjectID"
Using cn As New MySqlConnection(My.Settings.StudentConnection)
Using cmd As New MySqlCommand(query, cn)
cmd.Parameters.Add("@grade", MySqlDbType.Decimal).Value = 1
cmd.Parameters.Add("@studentID", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
cmd.Parameters.Add("@subjectID", MySqlDbType.Int32).Value = 1
cn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
End Sub
Чтобы отобразить оценки учеников, добавьте DataGridView в форму.
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim dt As New DataTable
Dim query As String = "Select st.studentName, sub.subjectName, g.grade
From grades g
Inner Join students st on g.studentID = st.studentID
Inner Join subjects sub on g.subjectID = sub.subjectID
Where st.studentID = @studentID;"
Using cn As New MySqlConnection(My.Settings.StudentConnection)
Using cmd As New MySqlCommand(query, cn)
cmd.Parameters.Add("@studentID", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dt
End Sub