我想减少 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
字段的值并没有减少。为什么会这样?我该如何解决?
为了非土耳其语读者的利益,urunadedi、urunid 和 urunadi 大致翻译为 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
关于c# - 使用命名参数减小值不会更改该值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23981768/