问题
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