0

2 番目のページでサブスクリプション カテゴリ (変数名subno )を選択するために使用される値を渡すためにクエリ文字列を使用しています。

サブスクリプション カテゴリに基づいて ( subnoはテーブル カテゴリの一部として SQL Server で整数として指定されます)、次の URL を使用して 2 番目のページが呼び出されます。

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

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) が渡された場合にうまく機能します。2ページ目が直接呼び出される場合

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

次に、subno の値は 0 として解釈されます。subno の値に基づいてクエリ (SelectCommand="SELECT [subscription] FROM [subscription] ) を変更する方法はありますか?

または、サブノが渡されない場合の正しい処理方法を提案してください

編集 -

質問の重要な部分を見逃して申し訳ありません-

アクセスしているとき 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 に答える