【问题标题】:No value given for one or more required parameters vb.net没有为一个或多个必需参数提供值 vb.net
【发布时间】:2017-12-06 09:58:49
【问题描述】:

大家好,我正在尝试使用下面的代码减少库存,但出现错误,谁能帮我好吗????`

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

【问题讨论】:

    标签: vb.net ms-access


    【解决方案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()
    

    【讨论】:

    • 你能告诉我如何参数化代码查询吗?
    • 嗨@Sunil 我根据你的建议对代码做了一些更新,但是当我运行我的应用程序时没有发生任何事情(没有错误,也没有工作)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多