在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,还是有一组预先罐装的完整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);