1

我有这个SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConflictDetection="CompareAllValues"
    ConnectionString="<%$ ConnectionStrings:OracleXexdb %>" 
    ProviderName="<%$ ConnectionStrings:OracleXexdb.ProviderName %>"
    SelectCommand="select col1, col2, col3 from table where col1 < 2000 and (col2 = :col2 OR :col2 is null)"
     OnSelecting="SqlDataSource1_Selecting"
    >
    <SelectParameters>
        <asp:ControlParameter ControlID="codagent" Name="col2" PropertyName="Text" Type="String" ConvertEmptyStringToNull="true" DefaultValue=""/>
    </SelectParameters>
</asp:SqlDataSource>

codagent是一个<asp:TextBox>并且用户可以输入一个值或什么都没有(“”),如果用户离开 TextBox 什么都没有,SqlDataSource则不检索任何值。我的目标是允许用户在没有过滤器的情况下获取所有 col2 值

我错过了什么吗?

4

4 回答 4

1

尝试将您的 SQL 更改为这样的内容

SelectCommand="select col1, col2, col3 from table where col1 < 2000 and (col2 = :col2 OR  (:col2 is null AND 1=1)"

我不确定 Oracle 中是否可以使用这样的表达式,因为我没有任何经验,但这是用于在 SQL Server 中完成相同操作的逻辑。

于 2013-09-23T18:45:43.233 回答
1

由于您已经在使用 的OnSelecting事件SqlDataSource,请使用此事件来修改您的Select命令。

此外,由于您希望用户检索所有col2值,因此实际上col1<2000只会检索所有此类列。[意思是col2col1>2000可以有对应的值,所以col2根本不会显示]

protected void SqlDataSource1_Selecting(object sender, 
SqlDataSourceSelectingEventArgs e) 
{ 
    if(string.IsNullOrEmpty(codagent.Text))
    {
      e.Command="select col1, col2, col3 from table where col1 < 2000";
    }
}
于 2013-09-24T03:58:15.943 回答
1

我找到了这样做的方法:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConflictDetection="CompareAllValues"
    ConnectionString="<%$ ConnectionStrings:OracleXexdb %>" 
    ProviderName="<%$ ConnectionStrings:OracleXexdb.ProviderName %>"
    SelectCommand="select col1, col2, col3 from table where col1 < 2000 and (col2 = :col2 OR (:col2 is null))"
    >

    <SelectParameters>
        <asp:ControlParameter ControlID="codagent" Name="col2" PropertyName="Text" Type="String" ConvertEmptyStringToNull="false" DefaultValue=""/>
    </SelectParameters>

</asp:SqlDataSource>

这工作得很好

于 2013-10-01T21:48:33.707 回答
0

你为什么不使用子查询。以下代码给出 col2, col3 col1 是否为空。

select (select col1 from table1 where col1 ='') as col1, col2, col3 from table1
于 2013-09-24T05:31:36.733 回答