0

私のプログラムには、学生テーブル用とユーザー テーブル用の 2 つの更新 SQL があります。学生テーブルのSQLは正常に機能し、新しいデータをデータベースに保存しましたが、ユーザーテーブルにデータを入力するSQLは機能しません。プログラムを実行してもエラーは発生しませんが、プログラムを終了してデータベースを確認すると、何も変更されていません。

Dim UpdateComm As New OleDb.OleDbCommand
Dim dbAdap As New OleDb.OleDbDataAdapter

ConnectToDB()

Dim sqlUpdateUser As String = "UPDATE usersTable SET usersTable.[Password] = " & _
  Chr(39) & txtNewPass.Text & Chr(39) & _
  ", usersTable.Username = " & Chr(39) & Username & Chr(39) & _
  " WHERE (((userTable.UserID) = " & Chr(39) & CurrentUID & Chr(39) & "));"

UpdateComm = New OleDb.OleDbCommand(sqlUpdateUser, dbConn)
UpdateComm.Parameters.AddWithValue("@p1", txtNewPass.Text)
UpdateComm.Parameters.AddWithValue("@p2", Username)
UpdateComm.ExecuteNonQuery()

ありがとう。

4

2 に答える 2

0

コメントに記載されているように、SQL インジェクション攻撃を回避するには、SQL コマンドをパラメーター化する必要があります。また、一般に、不適切な文字列連結によって発生したエラーも排除されます。コードは次のようになります。

Dim UpdateComm As New OleDb.OleDbCommand
Dim dbAdap As New OleDb.OleDbDataAdapter

ConnectToDB()

Dim sqlUpdateUser As String = "UPDATE usersTable SET [Password] = @pwd, Username = @userName WHERE UserID = @currentUID;"

UpdateComm = New OleDb.OleDbCommand(sqlUpdateUser, dbConn)
UpdateComm.CommandType = CommandType.Text;
UpdateComm.Parameters.AddWithValue("@pwd", txtNewPass.Text)
UpdateComm.Parameters.AddWithValue("@userName", Username)
UpdateComm.Parameters.AddWithValue("@currentUID", CurrentUID)
UpdateComm.ExecuteNonQuery()

CurrentUIDコマンドパラメーターに3番目を追加していないようです。列名に適用していたエイリアスも削除しました。1 つのテーブルしか扱っていないため、必要ありません。

于 2013-02-10T18:24:50.837 に答える
0

これを試して

Dim connection As New SqlConnection(connectionInfo)
Dim sqlUpdateUser As String = "UPDATE usersTable SET [Password] = @pwd, Username=        @userName WHERE UserID = @currentUID;"
Dim UpdateComm  As SqlCommand(sqlUpdateUser , connection)

 With UpdateComm .Parameters
   .AddWithValue("@pwd", txtNewPass.Text)
   .AddWithValue("@userName", Username)
   .AddWithValue("@currentUID", CurrentUID)
   .ExecuteNonQuery()
 End With
于 2013-02-10T18:32:08.630 に答える