0

レコードの更新中にエラーが発生しました。

まず、Datagrid から行を選択し、選択した行の値をテキスト ボックスに表示してから、更新ボタンをクリックしてレコードを更新します。新しいユーザー名とパスワードを入力したら、保存ボタンをクリックすると、次のようなエラーが表示されます。

エラー
system.data.oledb.oledbException(0x80040e14): UPDATE ステートメントの構文エラー。 System.data.Oledb.oledbCommand.executeCommandTextErrorHandling (Oledb Hresult hr)
で System.data.Oledb.OledbCommand.ExecutecommandTextforSingleResult (tagDBPARAMS dbParams、Object& executeResult) で System.data.Oledb.OledbCommand.Executecommand (CommandBehavior 動作、文字列メソッド ) で E:\kul....\frmusers.vb:line 152 の Nakul.frmusers.cmdsave_click(オブジェクト送信者、EventArgs e) のSystem.data.Oledb.OledbCommand.ExecuteNonQuery()










注 : ユーザー ID を更新したくありませんでした。

Data.accdb // Access File Name
table Name : users
Design View: userid Number // 主キー
                      ユーザー名 テキスト
                      パスワード テキスト

Imports System.Data
Imports System.Data.OleDb
public class users

Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\kul\Data.accdb;Persist Security Info=False;"

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click

    Dim conn As New OleDbConnection(str)
    Dim qry As New OleDbCommand("update users set username='" & txtusername.Text & "', password='" & txtpassword.Text & "' where userid=" & txtuserid.Text, conn)

            Try
                conn.Open()
                qry.ExecuteNonQuery()       // Error Line No 152 in Coading
                conn.Close()
                MsgBox("Record Updated")
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
 End Sub
End class
4

1 に答える 1

0

構文エラーの主な原因は PASSWORD という単語です。これは Access の予約済みキーワードであるため、角かっこでカプセル化する必要があります。

つまり、クエリを変更し、文字列連結ではなくパラメーター化されたアプローチを使用する必要があります。文字列を連結するクエリを作成すると、構文エラー (一重引用符を含むユーザー名?) の別の原因となり、SQL インジェクション攻撃への扉を開く可能性があります。

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click

    dim query = "update users set username=?, [password]=? where userid=?"
    Using conn = new OleDbConnection(str)
    Using qry = New OleDbCommand(query, conn)
        qry.Parameters.AddWithValue("@p1",txtusername.Text )
        qry.Parameters.AddWithValue("@p2",txtpassword.Text )
        qry.Parameters.AddWithValue("@p3",Convert.ToInt32(txtuserid.Text))
        conn.Open()
        qry.ExecuteNonQuery()       
        conn.Close()
        MsgBox("Record Updated")
    End Using
    End Using
 End Sub

また、接続とコマンドの正しい終了と破棄を保証する using ステートメントにも注意してください。

于 2013-06-13T13:09:56.730 に答える