我正在使用存储过程来更新库存商品数量。所有的代码似乎都很好,但不知道为什么它不工作它应该工作。我实际上想要更新项目中被称为masterDetials的库存表中的已购买商品(Pur_Quantity)的值,但数量没有得到更新,它只是将当前值放在前一个值旁边,即假设前一个商品库存是52,我新购买8个数量,所以项目的qunatity应该是60,但它显示我528而不是60。 任何人都可以告诉我它为什么会发生以及如何解决? 这是一个我知道的简单问题,但我是编程的新手,如果它看起来很傻就很抱歉。 这是我的存储过程:
ALTER PROCEDURE [dbo].[usp_UpdatePurchaseStockQuantity]
(@S_No int,
@Bill_No int,
@Pur_Date datetime,
@Ven_Name NVARCHAR (50),
@ItemName NVARCHAR (150),
@Quantity NVARCHAR (50),
@Unit_Price NVARCHAR (50),
@Total_Price NVARCHAR (50),
@Sub_Total NVARCHAR (50),
@Discount NVARCHAR (50),
@Grand_Total NVARCHAR (50),
@Paid NVARCHAR (50),
@Balance NVARCHAR (50),
@Remarks NVARCHAR (250),
@Pur_Quantity NVARCHAR (50)
)
AS
BEGIN
INSERT Into Purchase_Cart(S_No, Bill_no, Pur_Date, Ven_Name, ItemName, Quantity, Total_Price, Unit_Price, Discount, Sub_Total, Grand_Total, Paid, Balance, Remarks)
VALUES (@S_No, @Bill_No, @Pur_Date, @Ven_Name, @ItemName, @Quantity, @Total_Price, @Unit_Price, @Discount, @Sub_Total, @Grand_Total, @Paid, @Balance, @Remarks)
UPDATE MasterDetails
SET Pur_Quantity = (Pur_Quantity + @Quantity)
WHERE ItemName = @ItemName
END
这里是vb代码:
conn.Open()
For x As Integer = 0 To CartDataGridView.Rows.Count - 1
Dim SNo As Integer = CartDataGridView.Rows(x).Cells(0).Value
Dim ItemName As String = CartDataGridView.Rows(x).Cells(1).Value
Dim Qunatity As String = CartDataGridView.Rows(x).Cells(2).Value
Dim UnitPrice As String = CartDataGridView.Rows(x).Cells(3).Value
Dim TotalPrice As String = CartDataGridView.Rows(x).Cells(4).Value
Dim cmd As New SqlCommand("usp_MDAndPurchaseCartAddNewRecord", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@S_No", SNo)
cmd.Parameters.AddWithValue("@Bill_No", BillNoTextBox.Text)
cmd.Parameters.AddWithValue("@Pur_Date", DateTimePicker1.Value.Date)
cmd.Parameters.AddWithValue("@Ven_Name", VendorNameComboBox.Text)
cmd.Parameters.AddWithValue("@ItemName", ItemName)
cmd.Parameters.AddWithValue("@Quantity", Qunatity)
cmd.Parameters.AddWithValue("@Unit_Price", UnitPrice)
cmd.Parameters.AddWithValue("@Total_Price", TotalPrice)
cmd.Parameters.AddWithValue("@Sub_Total", TotalPriceTextBox.Text)
cmd.Parameters.AddWithValue("@Discount", DiscountTextBox.Text)
cmd.Parameters.AddWithValue("@Grand_Total", GrandTotalTextBox.Text)
cmd.Parameters.AddWithValue("@Paid", PaidTextBox.Text)
cmd.Parameters.AddWithValue("@Balance", BalanceTextBox.Text)
cmd.Parameters.AddWithValue("@Remarks", RemarksTextBox.Text)
cmd.Parameters.AddWithValue("@Pur_Quantity", Qunatity)
cmd.ExecuteNonQuery()
cmd.Dispose()
答案 0 :(得分:1)
字符串连接的工作方式:
要添加数值,必须使用数值数据类型(不是NVARCHAR)。如果您不能使用数字数据类型,则可以将sql更改为以下内容:
UPDATE MasterDetails
SET Pur_Quantity = (CAST(Pur_Quantity As INT) + CAST(@Quantity As INT))
WHERE ItemName = @ItemName
答案 1 :(得分:0)
您需要在使用前进行转换
UPDATE MasterDetails
SET Pur_Quantity = (try_convert(int,Pur_Quantity) + try_conver(int,@Quantity))
WHERE ItemName = @ItemName
你可以使用普通转换,如果有转换错误,那么整个更新将失败..为了避免你可以使用try_convert,如果转换中有错误,它会更新null