0

我正在使用查询字符串来传递一个值,该值用于在第二页上选择订阅类别(变量名subno )。

基于订阅类别(subno在 sql server 中指定为整数,作为表类别的一部分),使用以下 URL 调用第二页 -

http://localhost:53175/v1/ProductsList.aspx?subno=1
or
http://localhost:53175/v1/ProductsList.aspx?subno=2

在第二页 中, subno 用于根据传递的subno查询项目。

<asp:SqlDataSource ID="subscription" runat="server"  
        ConnectionString="<%$ ConnectionStrings:aimnbde3ConnectionString %>" 

        SelectCommand="SELECT [subscription] FROM [subscription] WHERE ([subno] = @subno)">
    <SelectParameters>
        <asp:QueryStringParameter Name="subno" QueryStringField="subno" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

如果通过了 category(varibale subno),则此代码运行良好。如果第二页被直接调用

http://localhost:53175/v1/ProductsList.aspx

然后 subno 的值被解释为 0。我们是否有办法根据 subno 的值更改查询(SelectCommand="SELECT [subscription] FROM [subscription] )?

或者请提出正确的方法来处理subno没有通过的情况

编辑——

很抱歉错过了问题的重要部分-

什么时候 http://localhost:53175/v1/ProductsList.aspx 访问我想显示所有产品,所以查询将是

SELECT [subscription] FROM [subscription]

如果传递了一个值,查询将是

SELECT [subscription] FROM [subscription] WHERE ([subno] = @subno)
4

2 回答 2

4

我会将查询更改为:

SELECT [subscription] FROM [subscription] WHERE (@subno is null or [subno] = @subno)

然后将以下内容添加到参数中

ConvertEmptyStringToNull = "TRUE"

以及以下到 SQLDataSource

CancelSelectOnNullParameter = "FALSE"

所以你的代码看起来像这样:

<asp:SqlDataSource ID="subscription" runat="server" CancelSelectOnNullParameter="false" 
        ConnectionString="<%$ ConnectionStrings:aimnbde3ConnectionString %>" 

        SelectCommand="SELECT [subscription] FROM [subscription] WHERE (@subno is null or [subno] = @subno)">
    <SelectParameters>
        <asp:QueryStringParameter Name="subno" QueryStringField="subno" Type="Int32" ConvertEmptyStringToNull = "true"/>
    </SelectParameters>
</asp:SqlDataSource>
于 2012-07-22T20:59:02.807 回答
3

您可以简单地将 SQL 查询的 where 部分更改为:

WHERE (@subno = 0 OR [subno] = @subno)
于 2012-07-22T20:56:07.100 回答