使用命名参数减小值不会更改所述值

我想减少Access数据库中的urunadedi值。 我有以下代码:

 cmd2.Connection = con; cmd2.Parameters.AddWithValue("@urunid", Convert.ToInt64(textBox1.Text)); cmd2.Parameters.AddWithValue("@hesaplam",Convert.ToInt64(textBox2.Text)); cmd2.CommandText = @"UPDATE Table1 SET urunadedi=urunadedi-@hesaplam WHERE urunadi=@urunid"; cmd2.ExecuteNonQuery(); 

但是, urunadedi字段的价值没有下降。 为什么这样,我该如何解决?


为了非土耳其语读者的利益, urunadediurunidurunadi大致翻译为ProductName ,而hesaplam大致翻译为计算

Microsoft OLEDB 忽略参数名称,仅关注参数在CommandText中的显示顺序 。 因此对于

 cmd2.CommandText = @"UPDATE Table1 SET urunadedi=urunadedi-@hesaplam WHERE urunadi=@urunid"; 

我们需要首先添加@hesaplam参数,因为它首先出现在CommandText中

 cmd2.Parameters.AddWithValue("@hesaplam", Convert.ToInt64(textBox2.Text)); cmd2.Parameters.AddWithValue("@urunid", Convert.ToInt64(textBox1.Text)); 

另请注意,由于OLEDB参数名称被忽略,因此将问号( ? )用作参数占位符是很常见的:

 cmd2.CommandText = @"UPDATE Table1 SET urunadedi=urunadedi-? WHERE urunadi=?"; cmd2.Parameters.AddWithValue("?", Convert.ToInt64(textBox2.Text)); // @hesaplam cmd2.Parameters.AddWithValue("?", Convert.ToInt64(textBox1.Text)); // @urunid