VB.Net更新项目数量值连接而不是添加到SQL Server中的previuos值中

时间:2016-09-22 09:43:09

标签: sql sql-server vb.net

我正在使用存储过程来更新库存商品数量。所有的代码似乎都很好,但不知道为什么它不工作它应该工作。我实际上想要更新项目中被称为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()

2 个答案:

答案 0 :(得分:1)

字符串连接的工作方式:

MSDN String Concatenation

要添加数值,必须使用数值数据类型(不是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