没有给出一个或多个必需参数vb.net的值

时间:2017-12-06 09:58:50

标签: vb.net ms-access

大家好我试图使用下面的代码减少股票,但是我得到错误,任何人都可以帮助我了吗?

Public Sub UpdateDecreaseQuantity()
    Try
        Dim cb As String = "Update Dish SET Quantity = stocksOnHand - '" & DataGridView1.CurrentRow.Cells(2).Value & "' "
        con.Open()
        cmd = New OleDbCommand(cb, con)
        cmd.ExecuteNonQuery()

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        cmd.Dispose()
        con.Close()
    End Try

End Sub

2 个答案:

答案 0 :(得分:1)

首先,如果DataGridView1.CurrentRow.Cells(2).Value0长度字符串或Nothing值,您将收到此错误。

请检查使用:
Not String.IsNullOrEmpty(DataGridView1.CurrentRow.Cells(2).Value)

其次,您在查询

中的Cell值周围添加了引号
  

'“& DataGridView1.CurrentRow.Cells(2).Value&”'“

数字值不应该有引号。

第三,此查询容易发生SQL注入攻击。请尝试参数化查询。

示例:

Dim OtherValue as Integer = 0
Dim cb As String = "Update Dish SET Quantity = stocksOnHand - @OtherValue"
con.Open()
cmd = New OleDbCommand(cb, con)
Int32.TryParse(DataGridView1.CurrentRow.Cells(2).Value, OtherValue)
cmd.Parameters.Add("@OtherValue", SqlDbType.Int).Value = OtherValue
cmd.ExecuteNonQuery()

答案 1 :(得分:0)

正如您在VB中使用双引号表示String但不将它们放在数字中一样,因此单引号表示SQL中的字符串。如果你要减去两个数字,那么它们必须都是数字,而不是一个数字和一个字符串。

Dim cb As String = "Update Dish SET Quantity = stocksOnHand - " & DataGridView1.CurrentRow.Cells(2).Value.ToString()

更好的方法是学习如何正确地将值插入SQL并使用参数。