更新记录出错
首先,我从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。执行命令(CommandBehavior行为,字符串方法)
at System.data.Oledb.OledbCommand.ExecuteNonQuery()
在Nakul.frmusers.cmdsave_click(对象发送者,EventArgs e)在
E: 库… frmusers.vb: 152行
数据。accdb//访问文件名
表名:users
设计视图:用户id 编号 // 主键
,,,,,,,,,,,,,,,,,,,,, username ,,文本
,,,,,,,,,,,,,,,,,,,,, password ,,文本
Imports System.Data
Imports System.Data.OleDb
public class users
Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:kulData.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
语法错误的主要原因是PASSWORD这个词。它是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语句,它确保正确关闭和处置连接和命令。