使用命名参数减小值不会改变所述值
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
字段的值并没有减少。为什么会这样?我该如何解决?
为了非土耳其语读者的利益,urunadedi、urunid 和 urunadi 大致翻译为 ProductName, hesaplam 大致翻译为 calculate。
【问题讨论】:
urunadi
在WHERE
子句中是否意味着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
【讨论】:
以上是关于使用命名参数减小值不会改变所述值的主要内容,如果未能解决你的问题,请参考以下文章
Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数