我的程序中有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()
感谢。
答案 0 :(得分: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
添加到命令参数中。我还删除了您应用于列名的别名 - 它们不是必需的,因为您只处理1个表。
答案 1 :(得分: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