Пожалуйста, помогите мне обновить записи доступа имен файлов "Data.accdb" в Vb.net, используя подключение oledb

Ошибка при обновлении записи.

Сначала я выбираю строку в Datagrid, затем выбираю значения строки, отображаемые в текстовом поле, затем нажимаю кнопку обновления, чтобы обновить запись. После ввода нового имени пользователя и пароля нажмите "Сохранить", затем получите сообщение об ошибке.

ОШИБКА
system.data.oledb.oledbException(0x80040e14): синтаксическая ошибка в инструкции UPDATE.
в
system.data.oledb.oledbCommand.executeCommandTextErrorHandling(Oledb Hresult hr)
в
System.data.Oledb.OledbCommand.ExecutecommandTextforSingleResult (tagDBPARAMS dbParams,
Object & executeResult)
в
System.data.Oledb.OledbCommand.Executecommand(Поведение CommandBehavior, метод String)
в System.data.Oledb.OledbCommand.ExecuteNonQuery()
в Nakul.frmusers.cmdsave_click(отправитель объекта, EventArgs e) в
E:\kul....\frmusers.vb: строка 152

Примечание: я не хотел обновлять идентификатор пользователя.

Data.accdb // Доступ к имени файла
Название таблицы: пользователи
Представление Design: номер пользователя // первичный ключ
текст имени пользователя
текст пароля

Imports System.Data
Imports System.Data.OleDb
public class users

Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\kul\Data.accdb;Persist Security Info=False;"

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click

    Dim conn As New OleDbConnection(str)
    Dim qry As New OleDbCommand("update users set username='" & txtusername.Text & "', password='" & txtpassword.Text & "' where userid=" & txtuserid.Text, conn)

            Try
                conn.Open()
                qry.ExecuteNonQuery()       // Error Line No 152 in Coading
                conn.Close()
                MsgBox("Record Updated")
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
 End Sub
End class

1 ответ

Решение

Основной причиной синтаксической ошибки является слово ПАРОЛЬ. Это зарезервированное ключевое слово в Access, поэтому вам нужно заключить его в квадратные скобки

Сказал, что вам нужно изменить свой запрос и использовать параметризованный подход, а не конкатенацию строк. Построение конкатенации вашего запроса может стать еще одним источником синтаксических ошибок (имя пользователя, содержащее одинарную кавычку?) И открыть дверь для атак с использованием SQL-инъекций.

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click

    dim query = "update users set username=?, [password]=? where userid=?"
    Using conn = new OleDbConnection(str)
    Using qry = New OleDbCommand(query, conn)
        qry.Parameters.AddWithValue("@p1",txtusername.Text )
        qry.Parameters.AddWithValue("@p2",txtpassword.Text )
        qry.Parameters.AddWithValue("@p3",Convert.ToInt32(txtuserid.Text))
        conn.Open()
        qry.ExecuteNonQuery()       
        conn.Close()
        MsgBox("Record Updated")
    End Using
    End Using
 End Sub

Также обратите внимание на оператор using, который обеспечивает правильное закрытие и удаление соединения и команды.

Другие вопросы по тегам