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