Я работаю в небольшой программе базы данных SQL. Программы для просмотра, редактирования и обновления записей базы данных. Все работает замечательно, учитывая, что я никогда раньше не пробовал что-то подобное. Мне удалось получить функции «Добавить записи», «Обновить записи» и «Удалить записи», работая безупречно. Тем не менее, я немного ударил, пытаясь ОБНОВИТЬ выбранную запись.SQL-программа UPDATE Ошибка записи
Чтобы уточнить, таблица SQL отображается в виде списка, из этого списка просмотра конечный пользователь может выбрать конкретную запись и либо отредактировать, либо удалить ее.
Кнопка редактирования открывает новый вид окна с текстовыми полями, которые автоматически заполняются текущей информацией этой записи.
Код для формы редактирования записи:
Private Sub frmEdit_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
intDB_ID_Selected = CInt(frmMain.lvRec.SelectedItems(0).Text)
Call dispCaption()
Call dispInfo() 'Display the info of the selected ID
End Sub
Private Sub dispInfo()
SQL = "Select * from PersonsA " & _
"where Members_ID=" & intDB_ID_Selected & ""
With comDB
.CommandText = SQL
rdDB = .ExecuteReader
End With
If rdDB.HasRows = True Then
rdDB.Read()
Me.midtxt.Text = rdDB!Members_ID.ToString.Trim
Me.gttxt.Text = rdDB!Gamer_Tag.ToString.Trim
Me.sntxt.Text = rdDB!Screenname.ToString.Trim
Me.fntxt.Text = rdDB!First_Name.ToString.Trim
Me.lntxt.Text = rdDB!Last_Name.ToString.Trim
Me.dobtxt.Text = rdDB!DoB.ToString.Trim
Me.dobtxt.Text = rdDB!DoB.ToString.Trim
Me.emailtxt.Text = rdDB!E_Mail_Address.ToString.Trim
Me.teamptxt.Text = rdDB!Position.ToString.Trim
Me.ugctxt.Text = rdDB!Cautions.ToString.Trim
Me.recordtxt.Text = rdDB!Record.ToString.Trim
Me.eventatxt.Text = rdDB!Event_Attendance.ToString.Trim
Me.Mstattxt.Text = rdDB!Member_Status.ToString.Trim
End If
rdDB.Close()
End Sub
Private Sub dispCaption()
End Sub
Private Sub cmdUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUpdate.Click
Call disControl()
'Validation
If invalidUpdateEntry() = True Then
Call enaControl()
Exit Sub
End If
'Prompt the user if the record will be updated
If MsgBox("Are you sure you want to update the selected record?", CType(MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2 + MsgBoxStyle.Question, MsgBoxStyle), "Update") = MsgBoxResult.Yes Then
'Update query
SQL = "Update PersonsA" & _
"SET Members_ID='" & Me.midtxt.Text.Trim & "'," & _
"Gamer_Tag='" & Me.gttxt.Text.Trim & "'," & _
"Screenname='" & Me.sntxt.Text.Trim & "'," & _
"First_Name='" & Me.fntxt.Text.Trim & "'," & _
"Last_Name='" & Me.lntxt.Text.Trim & "'," & _
"DoB='" & Me.dobtxt.Text.Trim & "'," & _
"E_Mail_Address='" & Me.emailtxt.Text.Trim & "'," & _
"Position='" & Me.teamptxt.Text.Trim & "'," & _
"U_G_Studio='" & Me.ugptxt.Text.Trim & "'," & _
"Cautions='" & Me.ugctxt.Text.Trim & "'," & _
"Record='" & Me.recordtxt.Text.Trim & "'," & _
"Event_Attendance='" & Me.eventatxt.Text.Trim & "'," & _
"Member_Status='" & Me.Mstattxt.Text.Trim & "'" & _
"WHERE Members_ID='" & intDB_ID_Selected & "'"
Call execComDB(SQL) 'Execute the query
Me.Close()
'*** Refresh the list
SQL = "Select * from PersonsA "
Call frmMain.dispRec(SQL)
'--- End of refreshing the list
Exit Sub
Else
Call enaControl()
End If
End Sub
Как я уже говорил, я был в состоянии сделать все остальное, используя очень похожий метод, но когда я пытаюсь для обновления записи я получаю сообщение об ошибке говорящее
необработанное исключение типа «System.Data.SqlClient.SqlException» произошло в System.Data.dll
Дополнительная информация: Неправильный синтаксис рядом с 'Members_ID'.
Я знаю, что эта линия, что проблема
"WHERE Members_ID='" & intDB_ID_Selected & "'"
Call execComDB(SQL) 'Execute the query
Но реферирования «intDB_ID_Selected» всегда работал раньше, и это было установлено, на нагрузке формы обновления записей в intDB_ID_Selected = CInt(frmMain.lvRec.SelectedItems(0).Text)
I знайте, что это огромная нить, но если кто-то может направить меня в правильном направлении. Не указывая мне переписать все заявление, я был бы навсегда благодарен.
EDIT1: Я зафиксировал запятую перед предложением WHERE, но я все равно получаю ту же ошибку.
Помните, что вы активно открываете атаки SQL-инъекций. Используйте SQL-команды с параметрами вместо того, чтобы добавлять SQL самостоятельно. – BlackICE
удалите запятую перед тем, где –