我收到错误“将数据类型 nvarchar 转换为实数时出错."

18

本文介绍了我收到错误“将数据类型 nvarchar 转换为实数时出错."的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我的代码如下,请告诉我问题出在哪里,以便我们可以按仓库 ID 降价 7%?

The code which I have is below, can you please inform me where the issue might be so we can drop the price by warehouse ID with 7%?

        private void button4_Click(object sender, EventArgs e)
    {
        try
        {
            myConnection = new SqlConnection(frm.cs);
            myCommand = new SqlCommand("update Inventory set Price=@Price where WarehouseCode=6", myConnection);
            myConnection.Open();
            myCommand.Parameters.AddWithValue("@Price", "@Price * 0.7");
            myCommand.ExecuteNonQuery();
            myConnection.Close();
            MessageBox.Show("Update successfully!");
            DisplayData();
            if (myConnection.State == ConnectionState.Open)
            {
                myConnection.Dispose();
            }
        }

推荐答案

当你的 仓库 ID折扣率 由最终用户指定,我建议您的代码如下:

As you are not assigning any value to @Price in the C# code while your Warehouse Id and the Discount rate are subject to be assigned by the end-user, I recommend your code be like this:

   private void button4_Click(object sender, EventArgs e)
   {
        try
        {
            var discountRate = 0.07; //could be Convert.ToDouble(textBox1.Text) or something else
            var warehouseId = 6;    //again, could be Convert.ToInt32(textBox2.Text) or something else
            myConnection = new SqlConnection(frm.cs);
            myCommand = new SqlCommand("update Inventory set Price=Price*(1-@DiscountRate) " +
                                        "where WarehouseCode=@WarehouseId", myConnection);
            myConnection.Open();
            myCommand.Parameters.AddWithValue("@DiscountRate", discountRate);
            myCommand.Parameters.AddWithValue("@WarehouseId", warehouseId);
            myCommand.ExecuteNonQuery();
            myConnection.Close();
            MessageBox.Show("Update successfully!");
            DisplayData();
            if (myConnection.State == ConnectionState.Open)
            {
               myConnection.Dispose();
            }
        }
        catch
        {

        }
    }

我还建议您重新考虑您的查询,因为它会使用相同的值更新所有产品价格,您可以考虑传递参数 @ProductId 并且您的查询是

I would also recommend you think again about your query as it will update all products price with the same value, you may consider passing parameter @ProductId and your query be

update Inventory set Price=Price*(1-@DiscountRate) 
where WarehouseCode=@WarehouseId and ProductCode=@ProductId

当然是这样.

这篇关于我收到错误“将数据类型 nvarchar 转换为实数时出错."的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

C# 中的多播委托奇怪行为?
Multicast delegate weird behavior in C#?(C# 中的多播委托奇怪行为?)...
2023-11-11 C#/.NET开发问题
6

参数计数与调用不匹配?
Parameter count mismatch with Invoke?(参数计数与调用不匹配?)...
2023-11-11 C#/.NET开发问题
26

如何将代表存储在列表中
How to store delegates in a List(如何将代表存储在列表中)...
2023-11-11 C#/.NET开发问题
6

代表如何工作(在后台)?
How delegates work (in the background)?(代表如何工作(在后台)?)...
2023-11-11 C#/.NET开发问题
5

没有 EndInvoke 的 C# 异步调用?
C# Asynchronous call without EndInvoke?(没有 EndInvoke 的 C# 异步调用?)...
2023-11-11 C#/.NET开发问题
2

Delegate.CreateDelegate() 和泛型:错误绑定到目标方法
Delegate.CreateDelegate() and generics: Error binding to target method(Delegate.CreateDelegate() 和泛型:错误绑定到目标方法)...
2023-11-11 C#/.NET开发问题
14