【问题标题】:VB.Net Update Item Quantity Values getting concatenated instead of getting added in the previuos value in SQL ServerVB.Net 更新项目数量值被连接而不是被添加到 SQL Server 中的先前值中
【发布时间】:2016-09-22 09:43:08
【问题描述】:

我正在使用存储过程来更新库存项目数量。所有的代码看起来都很好,但不知道为什么它不工作它应该工作。我实际上想更新项目中称为 masterDetials 的库存表中购买项目 (Pur_Quantity) 的值,但数量没有得到更新,它只是将当前值放在上一个值旁边,即假设上一个项目库存是52 我新购买了 8 个数量,所以项目数量应该是 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 个字符串时,它们只会连接起来,这就是您所看到的。很多这些参数类型应该改变。
  • 是的,我明白你的意思,这实际上是原因。修好了干杯

标签: sql sql-server vb.net


【解决方案1】:

这就是字符串连接的工作方式:

MSDN String Concatenation

要添加数值,您必须使用数值数据类型(不是 NVARCHAR)。如果你不能使用数值数据类型,你可以把 sql 改成这样:

UPDATE  MasterDetails
SET     Pur_Quantity = (CAST(Pur_Quantity As INT) + CAST(@Quantity As INT))
WHERE   ItemName = @ItemName

【讨论】:

  • 这是我尝试的解决方法 - 数据库存在以字符串表示的数字量 - 修改是否总是可行的?
  • 太棒了..干杯伙伴!!
【解决方案2】:

使用前需要转换

UPDATE  MasterDetails
SET     Pur_Quantity = (try_convert(int,Pur_Quantity) + try_conver(int,@Quantity))
WHERE   ItemName = @ItemName

你可以使用普通的转换,如果有转换错误那么整个更新将失败..为了避免你可以使用try_convert,如果转换有错误,它将更新null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-08
    • 2022-12-11
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多