C# 在SQL命令中将相等更改为其他内容
我正在使用windows窗体应用程序。我想通过用户选择更改SQL命令。这是我的密码:C# 在SQL命令中将相等更改为其他内容,c#,sql,sql-server,C#,Sql,Sql Server,我正在使用windows窗体应用程序。我想通过用户选择更改SQL命令。这是我的密码: command.CommandText = "SELECT * FROM Product WHERE price = @price"; command.Parameters.AddWithValue("@price", 35); 我还想将“=”更改为“>=”或其他内容。当我使用参数时,会出现错误 command.CommandText = "SELECT * FROM Urun WHERE price @eq
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的地方,但是有一组白色的选项
无论您是从bits动态构建完整的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);
编辑:正如Tim S所指出的。在文章中,让用户直接输入不是一个好主意。就我个人而言,我会从一个枚举中执行此操作,并使用用户输入来确定要使用哪个枚举值。如果您确实决定使用直接用户输入,请确保清除输入以避免可能的SQL注入。我假设OP只有少数可能的运算符,在这种情况下,CommandText属性上的简单“If”或“switch”语句将完成此工作。我明白了,因此无法动态执行此操作,谢谢您的帮助“我正在处理一个windows窗体应用程序。”如果可能,请改用WPF。它要好得多。@TimS。很可能它是一个正在维护的现有应用程序。也有可能有些人可能不熟悉WPF,而使用他们熟悉的。当然,因此“如果可能”。只需确保值来自硬编码的白名单,而不仅仅是用户输入。否则会毁了你的数据库。
string comparation=">="
command.CommandText =string.Format("SELECT * FROM Urun WHERE price {0} @price",comparation);
command.Parameters.AddWithValue("@price", 35);