我正在尝试通过SQL使用Visual Basic Express 2010更新Access 2003数据库,到目前为止我已经使用了SELECT,DELETE和INSERT查询,但更新不会...
con.ConnectionString = dbProvider & dbSource
con.Open() 'Open connection to the database
sqlstatement = "UPDATE users SET password = '" & NewPassword & "' WHERE USERID = " & ID & ";"
Dim dc As New OleDb.OleDbCommand(sqlstatement, con)
dc.ExecuteNonQuery()
con.Close()
就像我说的,所有其他陈述都有效,产生的错误是:
http://i.stack.imgur.com/acFBT.png
谢谢!
答案 0 :(得分:0)
第一个问题是PASSWORD这个词。它是MS-Access数据库中的保留关键字。如果你想使用它,你应该把它放在方括号中。
说,当你使用任何类型的数据库时,请开始使用参数化查询而不是字符串连接
所以你的代码应该是:
sqlstatement = "UPDATE users SET [password] = ? WHERE USERID = ?"
Using con = new OleDbConnection(dbProvider & dbSource)
Using dc = new OleDbCommand(sqlstatement, con)
con.Open()
dc.Parameters.AddWithValue("@p1", NewPassword)
dc.Parameters.AddWithValue("@p2", ID)
dc.ExecuteNonQuery()
End Using
End Using
您可以在许多地方了解参数化查询和Sql Injection的重要性,this link是最着名的一个