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

最初の問題は 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 インジェクションの重要性については、多くの場所で読むことができます。このリンクは、最も有名なリンクです。

于 2013-10-23T10:13:55.960 に答える