VB.net访问更新查询
问题描述:
VB.net访问更新查询在更新查询错误中给出语法错误。我的查询如下: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 users SET username='alison', password='farm1234',department='1',display_name='Alison *****', email='[email protected]**********.com', extension='1012',access_level='50' WHERE id=1
这是在查询运行为。
答
该错误是由保留关键字PASSWORD的使用引起的,未将其封入方括号中。
表示您从不使用字符串连接来构建sql命令,而是始终使用参数化查询来避免Sql注入问题,而且在解析文本值(包含单引号)或使用小数点分隔符或日期值解析文本值时出现语法错误。
所以,一个可能的方法来你的任务可能是
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命令文本中的显示顺序。
+0
请参阅上面的我的评论。我想重新阅读后,我的评论不适用。那么,我需要知道密码必须被封闭。 –
答
ConStr()
Qry="UPDATE users SET [email protected], [password][email protected], [email protected], " & _
"[email protected], [email protected], [email protected], [email protected]" & _
" WHERE [email protected]"
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()
您做错的第一件事就是将自己暴露给SQL注入攻击。 Google it ...接下来你可能会实际运行该代码,然后准确地给出我们在变量查询中的内容... –
我真的不担心SQL注入,因为该公司只包含大约15个我们家庭办公室的人员,其中没有人对此有多少了解。我在其他时候使用了准备好的语句来进行SELECT查询,但这只是更快。另外你需要先登录,它使用准备好的语句。请参阅上面的更新。 –
永远,永远,假设你知道谁将会被系统使用。始终编码安全。所有你需要的是一些经理决定放宽这个范围,突然你有一个任务关键软件包有一个根本的缺陷。哦 - 让他们通过参数化的查询登录不是防守......你认为他们想要通过登录?如果有意图仅仅是用其他人慷慨/愚蠢地离开登录的计算机删除表格...... –