在SQL命令中将等式更改为其他内容
本文关键字:其他 命令 SQL | 更新日期: 2023-09-27 18:05:42
我正在做一个windows窗体应用程序。我想通过用户选择更改SQL命令。下面是我的代码:
command.CommandText = "SELECT * FROM Product WHERE price = @price";
command.Parameters.AddWithValue("@price", 35);
我还想把"="改成">="或者别的什么。当我使用参数时,我得到错误。
command.CommandText = "SELECT * FROM Urun WHERE price @equal @price";
command.Parameters.AddWithValue("@price", 35);
command.Parameters.AddWithValue("@equal", ">=");
我该怎么做呢?
基本上不能。参数化SQL仅用于值—而不是表名、列名或操作符。这是您做可能想要动态构建SQL的地方-但是使用一组白名单选项。
您是动态地从位构建完整的SQL,还是有一组预先罐装的完整SQL查询,将取决于您想要做什么。显然,你仍然应该为这些值使用参数
我通常使用string.format()
来完成此操作。
command.CommandText = string.format("SELECT * FROM Product WHERE price {0} @price", ">=");
command.Parameters.AddWithValue("@price", 35);
在实际使用中,可以将">="替换为包含所需操作符的变量,例如:
string op = ">=";
command.CommandText = string.format("SELECT * FROM Product WHERE price {0} @price", op);
command.Parameters.AddWithValue("@price", 35);
EDIT:正如Tim s在评论中指出的那样,让用户直接输入这不是一个好主意。就我个人而言,我会从枚举中执行此操作,并使用用户输入来确定使用哪个枚举值。如果您决定使用直接用户输入,请确保清理输入以避免可能的SQL注入。
string comparation=">="
command.CommandText =string.Format("SELECT * FROM Urun WHERE price {0} @price",comparation);
command.Parameters.AddWithValue("@price", 35);