I get an error “Error converting data type nvarchar to real.”

元气小坏坏 提交于 2020-12-26 11:24:33

问题


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();
            }​​​​​​​
        }​​​​​​​

回答1:


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
        {

        }
    }​​​​​​​

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

sure that was for example.




回答2:


I don't think you actually want a parameter. If you want to reduce the price by 7%, then you ought to do the computation directly in the query. You also need to fix the arithmetic:

update Inventory set Price = Price *  0.93 where WarehouseCode = 6

Or maybe you wanted to pass the discount as a parameter. If so:

update Inventory set Price = Price * (1 - @Discount) where WarehouseCode=6", myConnection

And you would pass value 0.07 as a value to parameter @Discount.



来源:https://stackoverflow.com/questions/65372215/i-get-an-error-error-converting-data-type-nvarchar-to-real

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!