未选择字段的SQL语句

时间:2012-02-24 19:22:22

标签: c# asp.net sql sql-server database

我有一些下拉列表,允许用户选择值。用户还可以选择保留一些未选中的下拉菜单。

我正在尝试构造一个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语句,如果用户没有选择任何内容,则会显示所有结果。这可以通过编写

来实现
  

WHERE Gender = Gender

在SQL Server中

,但是当通过C#完成时没有返回任何结果。

2 个答案:

答案 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))