sqlite C#使用参数直接在更新查询中递增表值

r7s23pms  于 2023-01-31  发布在  SQLite
关注(0)|答案(1)|浏览(154)

我知道您可以通过执行以下操作在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";

但是它没有工作,这并不奇怪。有没有办法用参数来完成这个任务?如果没有,我使用第一个查询,它对注入安全吗?

uurv41yg

uurv41yg1#

不能将表达式作为参数传递,只能传递一个值。如果你知道要增加,但不知道增加多少,那么可以使用下面的SQL语句:

UPDATE SomeTable SET SomeColumn = SomeColumn + @Increment WHERE Id = @Id

然后您可以将1传递给该参数以增加1,等等。除非您将所有SQL代码作为string传递,并告诉数据库解析该代码并将其作为SQL执行,你必须在SQL代码中包含所有的逻辑,并且参数只能是数据值。这就是C#的工作原理。你不能'不要将逻辑的一部分作为string传递到方法中,并期望它被执行。

相关问题