我有一些下拉列表,允许用户选择值。用户还可以选择保留一些未选中的下拉菜单。
我正在尝试构造一个SQL语句,即使没有使用下拉列表,也会显示所有结果。我尝试了以下内容,但没有返回任何结果:
string field1 = null;
string field2 = null;
using (SqlCommand command = new SqlCommand("SELECT * FROM Table WHERE ((@Field1 is null) OR (Field1=@Field1)) AND ((@Field2 is null) OR (Field2=@Field2))", connection))
{
command.Parameters.Add(new SqlParameter("@Field1", field1));
command.Parameters.Add(new SqlParameter("@Field2", field2));
}
有人可以提出任何想法吗?我有太多的下拉菜单为每个未选择的组合制作一个SQL语句。
修改
为了澄清,可以从下拉列表中获得“Field1”和“Field2”的值。但是,如果用户愿意,用户可能不会选择一个。因此,我想为一般情况提供SQL语句,如果用户没有选择任何内容,则会显示所有结果。这可以通过编写
来实现在SQL Server中WHERE Gender = Gender
,但是当通过C#完成时没有返回任何结果。
答案 0 :(得分:2)
您的查询应该是:
SELECT * FROM Table WHERE ( (@Field1 is null) or (Field1=@Field1)) AND ((@Field2 is null) or (Field2=@Field2))
确保为那些未选择任何内容的参数传递null ...
答案 1 :(得分:0)
command.Parameters.Add(new SqlParameter("@Field1", field1));
command.Parameters.Add(new SqlParameter("@Field2", field2));
对于SQL Server参数,添加时需要在参数名称前面加上"@"
符号。请参阅上面的更正代码。
编辑:从您编辑的问题看起来,您的查询命中数据库可能有点偏差。如果您要提供可选参数,则在将它们添加到查询时需要感到厌倦。这可能更像你想要的:
select *
from yourtable
where
((@Field1 is null) or (Field1 = @Field1)) and
((@Field2 is null) or (Field2 = @Field2))