Я разрабатываю программу, которая позволяет пользователю сдавать тесты и получать за это оценку, процент и оценку.Они будут храниться в таблице данных с именем «tblStudentScores».Приведенный ниже код SQL предназначен для обновления соответствующей записи, когда пользователь завершает тест, чтобы сохранить его последнюю оценку за этот тест.
UPDATE tblStudentScores
SET Score = @Score, Percentage = @Perc, Grade = @Grade, CompletedTask = True
WHERE SpecificTaskID = @SpecID AND StudentID = @StudID;
При тестировании этого SQL в MS Access он работает отлично.Однако, когда я пытаюсь использовать тот же запрос, что и OleDBCommand в VB.NET, ничего не происходит.Нет сообщения об ошибке, но код также не обновляет таблицу.
Я думал, что это может быть связано с параметрами, поэтому я явно объявил их в верхней части запроса:
PARAMETERS @SpecID Number, @StudID Number, @Score Number, @Perc Number, @Grade Text;
Теперь, вместо того чтобы ничего не происходило, я получаю следующее сообщение об ошибке:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll
Additional information: Cannot update 'Score'; field not updateable.
Как я уже говорил ранее, запрос выполнен в конструкторе запросов MS Access, поэтому поле должно быть обновляемым.Что может быть не так?
РЕДАКТИРОВАТЬ: После дальнейшего тестирования я обнаружил, что запрос работает в VB при использовании фиксированных входных данных, а не параметров.Таким образом, проблема явно связана с параметрами, но в чем может быть проблема?
РЕДАКТИРОВАТЬ: весь фрагмент кода, в котором я создаю и использую запрос ниже:
Dim cmd As New OleDbCommand("PARAMETERS @Score Number, @Perc Number, @Grade Text, @SpecID Number, @StudID Number; UPDATE tblStudentScores " & _
"SET Score = @Score, Percentage = @Perc, Grade = @Grade, CompletedTask = True " & _
"WHERE SpecificTaskID = @SpecID AND StudentID = @StudID;", connection)
With cmd.Parameters
.AddWithValue("@Score", score)
.AddWithValue("@Perc", percentage)
.AddWithValue("@Grade", grade)
.AddWithValue("@SpecID", specificIDorder(cbxCurrentTasks.SelectedIndex))
.AddWithValue("@StudID", id)
End With
connection.Open()
cmd.ExecuteReader()
connection.Close()