c# - 使用命名参数减小值不会更改该值

标签 c# ms-access

我想减少 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 大致翻译为 ProductNamehesaplam 大致翻译为计算

最佳答案

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/

相关文章:

c# xamarin forms 主详细信息页面 MVVM

c# - 识别图像中的对象

c# - 持续保存数据

database - MS Access 从不同的表加载值以控制数据表形式的源

c# - Array.Clear(new [] {1,2,3}, 0, 2) 输出 [1,z2,z3]

c# - 二维瓷砖照明

sql - 从配置表中检索值以用于查询

ms-access - MS Access 更新表中的所有日期

vba - 公共(public)变量超出范围

sql - 将数据从 Access 复制到 SQL