0

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='production@**********.com', extension='1012',access_level='50' WHERE id=1

これは、クエリが実行されるものです。

4

2 に答える 2

2

このエラーは、予約キーワード PASSWORD を角括弧で囲まずに使用したために発生します。

文字列連結を使用してSQLコマンドを作成することは決してありませんが、SQLインジェクションの問題を回避するために常にパラメーター化されたクエリを使用するだけでなく、テキスト値(一重引用符を含む)または小数点記号または日付値を含む10進数値を解析する際の構文エラーも回避します。

したがって、あなたのタスクへの可能なアプローチは

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 コマンド テキストに表示される順序を尊重する必要があります。

于 2013-07-29T13:36:42.203 に答える
0
   ConStr()
    Qry="UPDATE users SET username=@uname, [password]=@pass, department=@dept, " & _
            "display_name=@dnam, email=@email, extension=@ext, access_level=@acslvl" & _
            " WHERE id=@id"
    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()
于 2013-07-29T15:07:11.450 に答える