大家好我试图使用下面的代码减少股票,但是我得到错误,任何人都可以帮助我了吗?
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
答案 0 :(得分:1)
首先,如果DataGridView1.CurrentRow.Cells(2).Value
为0
长度字符串或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并使用参数。