VB.net访问更新查询在更新查询错误中给出语法错误。我的查询如下:
query = "UPDATE users SET username='" & newUsername & "', password='" & newPassword & "', department='" & newDepartment & "', display_name='" & newDisplayName & "', email='" & newEmail & "', extension='" & newExtension & "', access_level='" & newAccessLevel & "' WHERE id=" & usrID
以上变量都没有任何符号。我做错了什么?
:: UPDATE ::
UPDATE users SET username='alison', password='farm1234',department='1',display_name='Alison *****', email='production@**********.com', extension='1012',access_level='50' WHERE id=1
这是查询运行的内容。
答案 0 :(得分:2)
错误是由于使用了保留关键字PASSWORD而没有将其括在方括号中。
说,你永远不会使用字符串连接来构建sql命令,但总是使用参数化查询来避免Sql Injection问题,但在解析文本值(包含单引号)或带有小数分隔符或日期值的十进制值时也会出现语法错误。
因此,您的任务的可能方法可能是
query = "UPDATE users SET username=?, [password]=?, department=?, " & _
"display_name=?, email=?, extension=?, access_level=?" & _
" WHERE id=?"
Using cmd = new OleDbCommand(query, connection)
cmd.Parameters.AddWithValue("@p1", newUsername)
cmd.Parameters.AddWithValue("@p2", newPassword)
cmd.Parameters.AddWithValue("@p3", newDepartment)
cmd.Parameters.AddWithValue("@p4", newDisplayName)
cmd.Parameters.AddWithValue("@p5", newEmail)
cmd.Parameters.AddWithValue("@p6", newExtension)
cmd.Parameters.AddWithValue("@p7", newAccessLevel)
cmd.Parameters.AddWithValue("@p8", usrID)
cmd.ExecuteNonQuery()
End Using
请记住,OleDb不使用参数名来在sql命令文本中查找相应的占位符。相反,它使用位置级数,因此将参数添加到集合应该遵循参数在sql命令文本中出现的顺序
答案 1 :(得分:0)
ConStr()
Qry="UPDATE users SET username=@uname, [password]=@pass, department=@dept, " & _
"display_name=@dnam, email=@email, extension=@ext, access_level=@acslvl" & _
" WHERE id=@id"
cmd = new oledbcommand(Qry,Conn)
cmd.Parameters.AddWithValue("@uname",newUsername)
cmd.Parameters.AddWithValue("@pass",newPassword)
cmd.Parameters.AddWithValue("@dept",newDepartment)
cmd.Parameters.AddWithValue("@dnam",newDisplayName)
cmd.Parameters.AddWithValue("@email",newEmail)
cmd.Parameters.AddWithValue("@ext",newExtension)
cmd.Parameters.AddWithValue("@acslvl",newAccessLevel)
cmd.Parameters.AddWithValue("@id",usrID)
cmd.ExecuteNonQuery()