Как исправить синтаксическую ошибку в инструкции UPDATE

#vb.net-2010

#vb.net-2010

Вопрос:

Я создавал базу данных для некоторых платежей, и в моем коде, похоже, ошибка, и я не вижу, в чем проблема. Я продолжаю получать сообщение «Синтаксическая ошибка в инструкции UPDATE» ошибка в OleDbExecution была необработанной. Кто-нибудь может помочь?

Вот мой код:

 Dim cnnOLEDB As New OleDbConnection

Dim cmdUpdate As New OleDbCommand

Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|UBSOMSPayments.accdb")

If TextBox1.Text <> "" Then
            cmdUpdate.CommandText = "UPDATE Payments SET Position='" amp; TextBox2.Text amp; "'," amp; "PaymentRecipient='" amp; TextBox3.Text amp; "'," amp; "PaymentFor='" amp; TextBox4.Text amp; "'," amp; "Amount='" amp; TextBox5.Text amp; "'," amp; "PayedAmount='" amp; TextBox6.Text amp; "'" amp; " WHERE AssignedOfficer = " amp; Val(TextBox1.Text)
            '1MsgBox(cmdUpdate.CommandText)
            cmdUpdate.CommandType = CommandType.Text
            cmdUpdate.Connection = conn
            conn.Open()
            cmdUpdate.ExecuteNonQuery() <--- Line where the error shows
            conn.Close()
            MsgBox("Record has been updated.")
        Else
            MsgBox("try again")
        End If
        cmdUpdate.Dispose()
  

Ответ №1:

Вы никогда не должны использовать конкатенацию строк для построения команд SQL, но всегда параметризованный запрос, чтобы избежать SQL-инъекций.

Попробуйте это:

Измените свой запрос на что-то вроде этого:

 "UPDATE [Payments] SET [Position] = ?, [PaymentRecipient] = ?, [PaymentFor] = ?, " amp; _
  "[Amount] = ?, [PayedAmount] = ? amp; _
  " WHERE [AssignedOfficer] = ?"
  

а затем добавьте параметры:

 cmdUpdate.Parameters.AddWithValue("@p1", TextBox2.Text)
cmdUpdate.Parameters.AddWithValue("@p2", TextBox3.Text)   
cmdUpdate.Parameters.AddWithValue("@p3", TextBox4.Text)   
cmdUpdate.Parameters.AddWithValue("@p4", TextBox5.Text)
cmdUpdate.Parameters.AddWithValue("@p5", TextBox6.Text)
cmdUpdate.Parameters.AddWithValue("@p6", TextBox1.Text)
cmdUpdate.ExecuteNonQuery()
  

Комментарии:

1. есть ли разница, если я использую access database? В любом случае, та же ошибка все еще появляется. У меня здесь правильно написано имя моей таблицы и поля, если вы могли бы сказать, что это причина.

2. @Erick Я обновил свой ответ. Попробуйте экранировать столбцы с помощью обновленного запроса и дайте мне знать, если это сработает.