2017-02-14 4 views
-6
SqlQuery = "INSERT INTO GradeTable(Grade,UserID,RegDate)Values('" & TxtGrade.Text.Trim & "','" & UserID & "','" & DTBReg.Value & "'Where GradeTable.StudentID ='" & StudentID & "' and GradeTable.CourseID= '" & CourseID & "') " 
+4

Вы должны прочитать о, понять и начать использовать параметризованные запросы перед тем, как приходят визитные карточки. http://bobby-tables.com/ Это пример учебника для уязвимости sql injection. –

+3

Это не вопрос, это код. – HoneyBadger

+7

Почему вы используете предложение where в инструкции insert? – NicoRiff

ответ

2

Похоже, что вы пытаетесь сделать то, что вам нужно, это инструкция UPDATE, а не INSERT, когда вы пишете. Это, кажется, гораздо больше: запрос, соответствующий ему

UPDATE GradeTable 
SET Grade = @grade, 
    UserID = @UserID, 
    RegDate = @RegDate 
WHERE StudentID = @StudentID AND CourseID = @CourseID 

Обратите внимание, что я использовал параметры, а не стоимость вашего текстового поля. Это связано с тем, что вы уязвимы для одного из наиболее распространенных недостатков безопасности базы данных, которые являются SQL Injection.

Используйте этот текст для вашего запроса, а затем вы можете добавить свои значения в запрос таким образом:

cmd.Parameters.AddWithValue("@grade", TxtGrade.Text.Trim); 
cmd.Parameters.AddWithValue("@UserID", UserID); 
//AND SO ON WITH OTHER PARAMETERS 

Assumming ЦМД ваш SqlCommand

+2

Будьте осторожны с помощью AddWithValue в специальных запросах. Иногда это может привести к неправильному типу данных и вызвать проблемы. Лучше всего явно определить тип данных. http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ Все еще +1 от меня !!! –

+0

@SeanLange, вы правы в этом. Я просто использовал AddWithValue, поскольку я не знаю типы данных таблиц OP. Хорошее наблюдение. – NicoRiff