Пожалуйста, помогите мне обновить записи имен файлов доступа Data.accdbin 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 Behavior, String method )
at System.data.Oledb.OledbCommand.ExecuteNonQuery()
at Nakul.frmusers.cmdsave_click(отправитель объекта, EventArgs e)in
E:\kul....\frmusers.vb:line 152


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

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

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

person Nakul14    schedule 13.06.2013    source источник


Ответы (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, который обеспечивает правильное закрытие и удаление соединения и команды.

person Steve    schedule 13.06.2013