2013-07-29 100 views
0

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 

这是在查询运行为。

+0

您做错的第一件事就是将自己暴露给SQL注入攻击。 Google it ...接下来你可能会实际运行该代码,然后准确地给出我们在变量查询中的内容... –

+0

我真的不担心SQL注入,因为该公司只包含大约15个我们家庭办公室的人员,其中没有人对此有多少了解。我在其他时候使用了准备好的语句来进行SELECT查询,但这只是更快。另外你需要先登录,它使用准备好的语句。请参阅上面的更新。 –

+0

永远,永远,假设你知道谁将会被系统使用。始终编​​码安全。所有你需要的是一些经理决定放宽这个范围,突然你有一个任务关键软件包有一个根本的缺陷。哦 - 让他们通过参数化的查询登录不是防守......你认为他们想要通过登录?如果有意图仅仅是用其他人慷慨/愚蠢地离开登录的计算机删除表格...... –

回答

2

该错误是由保留关键字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

请参阅上面的我的评论。我想重新阅读后,我的评论不适用。那么,我需要知道密码必须被封闭。 –

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()