【问题标题】:SQL statement for unselected fields未选择字段的 SQL 语句
【发布时间】:2012-02-24 19:22:22
【问题描述】:

我有许多下拉列表,允许用户选择值。用户还可以选择不选择某些下拉菜单。

我正在尝试构建一个 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 性别=性别

在 SQL Server 中,但通过 C# 完成时没有返回结果。

【问题讨论】:

  • 您确定在您选择的表格中,字段 1 的值是“字段 1”,字段 2 的值是“字段 2”吗?
  • 他们没有这些值,但我试图在表格中显示所有结果。当我使用该代码在 SQL Server 中编写查询时,它的行为就好像它忽略了“WHERE”子句,在用户没有从下拉列表中选择某些内容的情况下,这是我想要的。
  • 您的参数命名不正确,请参阅下面 Shark 的回答。
  • 如果用户未选择任何内容,则不要将任何内容分配给变量 Field1 或 Field2。
  • @muratgu - 更新了我的代码以反映更改。

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


【解决方案1】:

您的查询应该是这样的:

SELECT * FROM Table WHERE ( (@Field1 is null) or (Field1=@Field1)) AND ((@Field2 is null) or (Field2=@Field2))

请确保为那些未选择任何参数的参数传入 null...

【讨论】:

  • 更新了我的代码以反映更改。仍然没有返回任何东西。
  • @sean:发布实际查询是什么。意思是,你传递了什么价值观?另外,您确定有查询数据。
【解决方案2】:
       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))

【讨论】:

  • 恐怕还是没有返回结果!
  • @Sean 运行 SQL 跟踪并查看正在访问数据库的查询。如果没有看到您的完整查询和驻留在那里的数据,很难说清楚。
  • @Sean:您还在为参数分配“Field1”和“Field2”值吗?如果用户没有选择任何东西,你应该分配 null。
  • @Sean muratgu 是对的。如果您只分配一个空白文本,那么它仍然无法正常工作。如果新参数为空,请勿传递。
  • @Shark 更新了我的代码以反映更改。仍然没有返回任何东西。
猜你喜欢
  • 2021-03-26
  • 2016-06-17
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多