我正在尝试在ddl中选择用户之后添加投票计数。 我不明白我做错了什么。
Dim str As String
str = "update [vote] SET [voteweight] = [voteweight]+1 where [userID] = 'DropDownList4.Selectedvalue'"
Dim Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;; data source=" & Server.MapPath("App_Data/final.mdb"))
Dim cmd As New OleDbCommand(str, Conn)
Conn.Open()
cmd.ExecuteNonQuery()
Conn.Close()
答案 0 :(得分:0)
将值传递给sql命令的正确方法是通过参数化查询。否则,可能嵌入到字符串中的错误非常多且微妙。
在您的代码中,控件值周围的单引号会转换文字字符串中的所有内容,当然,UserID
字段是无法与字符串进行比较的数字字段
if DropDownList4.Selectedvalue = Nothing then
Return
End If
Dim str = "update [vote] SET [voteweight] = [voteweight]+1 " & _
"where [userID] = @userid"
Using Conn = New OleDbConnection(.....)
Using cmd As New OleDbCommand(str, Conn)
Conn.Open()
cmd.Parameters.Add("@userid", OleDbType.Int).Value = Convert.ToInt32(DropDownList4.Selectedvalue)
cmd.ExecuteNonQuery()
End Using
End Using
其他要存在的事情是:
Using Statement围绕一次性对象,例如连接和命令(因此,如果异常触发并且您忘记丢弃它们,则可以避免泄漏资源的可能性)
检查SelectedValue周围的null总是一个很好的衡量标准。有时您的控件可能会松开选择,您应该绝对确定无法使用SelectedValue = Nothing输入此代码。