Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL命令中将相等更改为其他内容_C#_Sql_Sql Server - Fatal编程技术网

C# 在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

我正在使用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的地方,但是有一组白色的选项


无论您是从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);