0

次の問題があります。クエリ文字列パラメータでストアド プロシージャに null 値を送信したい。

これは私のストアドプロシージャです

CREATE PROCEDURE spGetAllProducts
 @catID int = null,
 @subcatID int = null
AS
BEGIN
    SELECT * FROM Products WHERE
    ((@catID is null) OR (category_id = @catID))
    AND ((@subcatID is null) OR (subcategory_id = @subcatID))
END

まさに私が望むように、次のクエリでテストしているときに機能しています

spGetAllProducts null, '3'
spGetAllProducts '8', null
spGetAllProducts '8', '3'
spGetAllProducts null, null

しかし、queryparameter で null 値を送信しようとすると、機能しません

ここに私のsqldatasourceがあります

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringReviewDB %>" SelectCommandType="StoredProcedure" SelectCommand="spGetAllProducts">

    <SelectParameters>
    <asp:QueryStringParameter Direction="Input" Name="catID" QueryStringField="catID" Type="Int32" />
    <asp:QueryStringParameter Direction="Input" Name="subcatID" QueryStringField="subcatID" Type="Int32" DefaultValue="" ConvertEmptyStringToNull="True" />
    </SelectParameters>

    </asp:SqlDataSource>

このようなクエリを送信しているとき

http://localhost:50693/TreeViews.aspx?catID=8&subcatID=3

動作していますが、次のクエリを送信すると動作しません

http://localhost:50693/TreeViews.aspx?catID=8&subcatID=

今からThx

4

1 に答える 1

0

このようにしてみてください

CREATE PROCEDURE spGetAllProducts @catID int = null, @subcatID int = null AS BEGIN SELECT * FROM Products WHERE ((@catID '') OR (category_id = @catID)) AND ((@subcatID = '') OR (subcategory_id = @subcatID)) END

ストアドプロシージャはnullではなく空の文字列として受け取ると思いますが、同様の問題があり、うまくいきました

于 2013-07-11T15:13:46.670 に答える