VB.net-条件表达式中的数据类型不匹配

时间:2015-04-09 19:48:37

标签: vb.net string

我正在尝试在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()

1 个答案:

答案 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输入此代码。