VB在SQL表中检查金额并在SQL中更新表



我需要一些验证方面的帮助。我应该做的是检查文本框中的数字是否大于或小于该特定项目(从下拉列表中选择(的数量(存储在名为inventory的SQL表中(。如果文本框中的数字大于该商品的数量,则会弹出一条消息,说明该商品的量不足。如果该数字小于SQL表中该项目的数量,则它会更新该项目的该数量。我的问题是,我的验证不会进行第二次验证。这就像它卡在第一个if语句上,我不知道如何修复它。我觉得它很简单,但我就是无法用手指触摸它。这是我的代码:

Dim DA As New SqlDataAdapter("Select itemID, quantity From Inventory", con)
Dim DT As New DataTable
Try
If DT.Rows.Count > 0 Then DT.Rows.Clear()
DA.Fill(DT)
With DropDownList1
.DataSource = DT
.DataTextField = "itemID"
.DataValueField = "quantity"
.DataBind()
.Items.Insert(0, "Please Select a Customer")
End With
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim PurchaseQuantity, UP, SL As String
PurchaseQuantity = TextBox1.Text
Dim cmdUpdate As New SqlCommand("Update Inventory SET quantity = @p1 where price = @p2", con)
With cmdUpdate.Parameters
.Clear()
.AddWithValue("@p1", PurchaseQuantity)
.AddWithValue("@p2", DropDownList1.SelectedValue)
End With
Dim cmdSelect As New SqlCommand("Select quantity From Inventory where itemID = @p1", con)
With cmdSelect.Parameters
.Clear()
.AddWithValue("@p1", DropDownList1.SelectedValue)
End With
Try
If con.State = ConnectionState.Closed Then con.Open()
UP = cmdUpdate.ExecuteNonQuery
SL = cmdSelect.ExecuteScalar
Catch ex As Exception
Response.Write(ex.Message)
Finally
con.Close()
End Try
If PurchaseQuantity > SL Then
MsgBox("There is not enough quantity for this item", vbExclamation, "Error")
Else
If PurchaseQuantity < SL Then
MsgBox("Inventory is updated", vbExclamation, "Error")
UP -= PurchaseQuantity
End If
End If

因此,您将看到错误"这个商品的数量不够吗;?

我看到一些问题:

Update Inventory SET quantity = @p1 where price = @p2

应该是:

Update Inventory SET quantity = quantity - @p1 where itemID = @p2

此外,命令的顺序是向后的。SELECT应该发生在UPDATE之前。(否则,您将从库存中扣除数量,然后检查您是否有足够的数量来完成订单。(

此外,整个操作应该是有事务限制的。使用当前代码,您对某种竞争条件持开放态度。(如果同时下了(2(个订单,您可能会得到负库存数量。(或者,至少在表上设置一个检查约束(Inventory.quantity>0(,以便在VB中强制执行SQL异常并停止更新。

相关内容

  • 没有找到相关文章