我知道您可以通过执行以下操作在SQL中递增值:
"UPDATE Table SET value=value+1 where Id=@Id"
现在,我想知道是否有可能用参数来做等价的运算?
我试过了
string sql = "UPDATE Table SET value=@value where Id=@Id"
var cmd = new SQLiteCommand(sql, conn);
cmd.Parameters.Add("@value", DBType.Int).Value = "value+1";
但是它没有工作,这并不奇怪。有没有办法用参数来完成这个任务?如果没有,我使用第一个查询,它对注入安全吗?
1条答案
按热度按时间uurv41yg1#
不能将表达式作为参数传递,只能传递一个值。如果你知道要增加,但不知道增加多少,那么可以使用下面的SQL语句:
然后您可以将1传递给该参数以增加1,等等。除非您将所有SQL代码作为
string
传递,并告诉数据库解析该代码并将其作为SQL执行,你必须在SQL代码中包含所有的逻辑,并且参数只能是数据值。这就是C#的工作原理。你不能'不要将逻辑的一部分作为string
传递到方法中,并期望它被执行。