Как создать оператор обновления, когда поле вводится как переменная / параметр - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь обновить таблицу в базе данных, но каждый раз, когда нажимается кнопка, она должна обновлять другой столбец той же записи.Есть идеи, как это сделать?

В таблице есть столбцы QuizID (autonumber), QuizName (строка), OutOf (целое число), Question1 (целое число), Question2 и т. Д. При каждом нажатии кнопки она должна обновляться.следующий столбец QuestionX.

Using cmd As New OleDbCommand("UPDATE Quizzes SET @questionColumn = @questionID WHERE QuizName = @quizName", myConnection)
   cmd.Parameters.Add("@questionColumn", OleDbType.Char).Value = "Question" & questionNumber.ToString()
   cmd.Parameters.Add("@questionID", OleDbType.Integer).Value = questionID
   cmd.Parameters.Add("@quizName", OleDbType.Char).Value = txtQuizName.Text
   cmd.ExecuteNonQuery()
End Using

questionNumber - это целое число, которое увеличивается на 1 при каждом нажатии кнопки, а questionID и txtQuizName.Text являются ранее полученными значениями.

Я ожидал, что столбец QuestionX обновится, но код выдает ошибку, говоря, что @questionColumn не обновляется;но если я заменим это на Question1 и закомментирую параметр, он будет работать нормально, но (очевидно) не изменит, какой столбец он обновляет.

Что я сделал не так в этот раз?

1 Ответ

0 голосов
/ 27 января 2019

Вы не можете привязать имя столбца к параметру.Вам необходимо построить запрос динамически.

Using cmd As New OleDbCommand("UPDATE Quizzes SET Question" & questionNumber.ToString() & " = @questionID WHERE QuizName = @quizName", myConnection)
   cmd.Parameters.Add("@questionID", OleDbType.Integer).Value = questionID
   cmd.Parameters.Add("@quizName", OleDbType.Char).Value = txtQuizName.Text
   cmd.ExecuteNonQuery()
End Using
...