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

Posted

技术标签:

【中文标题】使用命名参数减小值不会改变所述值【英文标题】:Decreasing a value with a named parameter doesn't change said value 【发布时间】:2014-06-01 16:06:55 【问题描述】:

我想减少我在 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 大致翻译为 calculate

【问题讨论】:

urunadiWHERE 子句中是否意味着urunadedi 尝试交换Parameters.AddWithValue 语句的顺序。 (先添加@hesaplam参数,再添加@urunid参数。) 我的兄弟,非常感谢你的回答,非常高兴真的恭喜...... 【参考方案1】:

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

【讨论】:

以上是关于使用命名参数减小值不会改变所述值的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWK 解析命名参数值

Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数

groovy中具有默认值的命名参数

mybatis二(参数处理)

Kettle位置参数(Argument)命名参数(Parameter)变量(Variable)

Kettle位置参数(Argument)命名参数(Parameter)变量(Variable)