我正在编写一个程序,当用户在列表视图上选择记录时,该程序会更新密码或积分。我收到错误“没有为 1 个或多个必需参数给出值”,我不知道如何纠正,我是否遗漏了一些明显的东西?
Dim sql As String = "UPDATE Users SET [Password] = @2,[LoyaltyPoints] = @3 WHERE [Username] = '" & mListView.SelectedItems(0).Text & "'"
cmd = New OleDbCommand(sql, con)
'ADD PARAMETER
cmd.Parameters.AddWithValue("@1", UpdatedUser)
cmd.Parameters.AddWithValue("@2", UpdatedPass)
cmd.Parameters.AddWithValue("@3", UpdatedPoints)
'OPEN CONNECTION,EXECUTE UPDATE,CLOSE CONNECTION'
Try
con.Open()
adapter = New OleDbDataAdapter(cmd)
adapter.UpdateCommand = con.CreateCommand()
adapter.UpdateCommand.CommandText = sql
If (adapter.UpdateCommand.ExecuteNonQuery() = 0) Then 'Error Appears Here
MsgBox("Successfully Updated")
ClearAll()
Else
MsgBox("Unsuccessful")
End If
con.Close()
Retrieve()
Catch ex As Exception
MsgBox(ex.Message)
con.Close()
End Try
End Sub
其他人已经指出了问题(和解决方案),但我想添加一件事......避免命名参数 1、2、3 或 A、B、C。我敢打赌,如果你将它们命名为如果采用与发送的数据相对应的方式,则可以更轻松地诊断问题。您在查询中缺少@1...但不要将其命名为@1:
Dim sql As String = "UPDATE Users SET [Password] = @PASS,[LoyaltyPoints] = @POINTS WHERE [Username] = @USER"
cmd = New OleDbCommand(sql, con)
cmd.Parameters.AddWithValue("@USER", UpdatedUser)
cmd.Parameters.AddWithValue("@PASS", UpdatedPass)
cmd.Parameters.AddWithValue("@POINTS", UpdatedPoints)
不要在伤口上撒盐,但你的解决方案是一个很大的倒退。参数各方面都不错。它们更适合数据库、更干净的代码、完全安全,并且它们可以处理奇怪的数据,例如,如果您传递的任何值中存在单引号字符(如果发生这种情况,您的解决方案将崩溃)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)