【问题标题】:filter syntax where some items may or may not be selected [duplicate]过滤语法,其中某些项目可能会或可能不会被选择[重复]
【发布时间】:2018-02-10 05:35:16
【问题描述】:

我的 asp.net 表单上有 3 个下拉框:Country、State 和 City。我想用这些来过滤我的数据。但是,我也希望用户能够不使用过滤器,或者不使用所有过滤器。

例如,他们可能根本不想过滤。或者他们可能只想按国家过滤。或仅按国家/州。或者,如果不是美国,则按国家/城市。

我不知道如何写这个。现在我有:

 SqlDataAdapter adapter = new SqlDataAdapter("Select * from [MOS_Role] where [Country_ID] = @CoID AND [State_ID] = @StID AND [City_ID] = @CiID ORDER BY [Role] ASC", con2);
 adapter.SelectCommand.Parameters.AddWithValue("@CoID", Convert.ToInt32(ddlCountry.SelectedValue));
 adapter.SelectCommand.Parameters.AddWithValue("@StID", Convert.ToInt32(ddlState.SelectedValue));
 adapter.SelectCommand.Parameters.AddWithValue("@CiID", Convert.ToInt32(ddlCity.SelectedValue));

但当您未选择下拉菜单时,这不起作用。

【问题讨论】:

    标签: c# sql sql-server code-behind


    【解决方案1】:

    这是对您有帮助的查询

    Select * from [MOS_Role]
    where ([Country_ID] = @CoID OR @CoID IS NULL)
    AND ([State_ID] = @StID OR @StID IS NULL)
    AND ([City_ID] = @CiID OR @CiID IS NULL)
    ORDER BY [Role] ASC
    

    如果未选择,您应该作为参数选择值或null 传递。

    【讨论】:

      【解决方案2】:

      你需要先检查它是否为空,然后添加。为每个AddWithValue 调用执行此操作:

      if (!string.IsNullOrWhiteSpace(ddlCountry.SelectedValue))
          adapter.SelectCommand.Parameters.AddWithValue("@CoID", Convert.ToInt32(ddlCountry.SelectedValue));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-23
        相关资源
        最近更新 更多