1

vb からアクセス db の列を更新するこの sql ステートメントがありますが、プログラムを実行すると、ステートメントに構文エラーがあることが示されます。コード:

cmd.Connection = cnn
cmd.CommandText = 
    "UPDATE users SET password='" & 
    Me.pd.Text.Trim & "' WHERE password='" & Me.pd.Tag.ToString & "'"
cmd.ExecuteNonQuery()`

エラーは、更新ステートメントに構文エラーがあることを示しています。エラーを見つけようとしましたが、無駄でした。

4

2 に答える 2

3

まず、現在のパスワードではなく、別のフィールド (ユーザー ID、名前、電子メールなど) で更新を行う必要があります。

'SQL インジェクションを含む値によるエラーを回避するために、文字列連結の代わりに名前付きパラメーターを使用するようにしてください。

[name]テーブルまたはフィールドの名前をエスケープするために使用することもできます (SQL Server を使用していると仮定します)。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx#Y684

cmd.CommandText = "UPDATE [users] SET [password]=@current_password WHERE [password]=@new_password"
cmd.Parameters.AddWithValue("@current_password", Me.pd.Text.Trim)
cmd.Parameters.AddWithValue("@new_password", Me.pd.Tag.ToString)
cmd.ExecuteNonQuery()
于 2012-04-21T07:53:25.767 に答える
1

あなたの質問は、あなたが受け取ったコメントに反映されているように、他の多くの重要な問題を引き起こしました. 私はそれらの問題のどれも却下したくありません。passwordただし、これは予約語であることに注意してください。Access の問題名と予約語を参照してください。

テーブル名とフィールド名を括弧で囲むという mazzucci のアドバイスに従うと、構文エラーが解消される可能性があります。usersただし、予約語ではないため、実際にはテーブル名を括弧で囲む必要はありません。

于 2012-04-21T16:35:52.193 に答える