1

我正在尝试通过 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

谢谢!

4

1 回答 1

0

第一个问题是密码这个词。它是 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 注入的重要性,这个链接是最有名的开始

于 2013-10-23T10:13:55.960 回答