-1

私は本当に奇妙な問題を抱えており、それに対する解決策を見つけることができないようです. 一連のパラメーターを含む SqlDataSource と、ストアド プロシージャの形式の選択コマンドがあります。パラメータの 1 つは @SearchPhrase と呼ばれる文字列で、テキスト ボックスから値を取得します。テキスト ボックスを空のままにすると、すべての投稿が返されます。パラメータは、最初に searchBox.Text.Trim() の値を @SearchPhrase に設定し、次に検索結果を表示する gridview をデータバインドする検索ボタンを介して値を取得します。

ストアド プロシージャは正常に動作し、テキスト ボックスに値が入力されている限り結果を返しますが、空のままにするとストアド プロシージャは実行されません。これは、呼び出されるたびに挿入されるすべてのパラメーターを格納する行を追加したためです。

テキストボックスに何かを入力しないと実行できないのはなぜですか? 実行させる唯一の方法は、空白を入力して " " をストアド プロシージャに渡し、その後で左右のトリミングを行うことです。長さ = 0 の文字列を渡すときではないのはなぜですか?

データソースとパラメーターの割り当てのコードは次のとおりです。問題を引き起こしているのは @SearchPhrase パラメータだけで、残りは問題なく機能します。クリック イベントの最初の 3 行 (コメント付き) は、" " を割り当てて動作させるにはやや見苦しい方法です。

        <asp:SqlDataSource ID="enterprisesDS" runat="server" 
            ConnectionString="<%$ ConnectionStrings:CRMdb %>" 
            SelectCommand="entGetEnterprises" SelectCommandType="StoredProcedure">

            <SelectParameters>
                <asp:Parameter Name="SearchPhrase" Type="String" />
                <asp:Parameter Name="IsActive" Type="Boolean" DefaultValue="true" />
                <asp:Parameter Name="Country" Type="Byte" />
                <asp:Parameter Name="LocalReference" Type="String" />
                <asp:Parameter Name="Class" Type="String" />
                <asp:Parameter Name="LocationID" Type="Byte" />
            </SelectParameters>

        </asp:SqlDataSource>

        protected void search_Click(object sender, EventArgs e)
    {
        //string searchPhrase = " ";

        //if (searchBox.Text.Trim().Length > 0)
        //    searchPhrase = searchBox.Text.Trim();

        enterprisesDS.SelectParameters["SearchPhrase"].DefaultValue = searchBox.Text;
        enterprisesDS.SelectParameters["Country"].DefaultValue = countries.SelectedValue;
        enterprisesDS.SelectParameters["LocalReference"].DefaultValue = localReferences.SelectedValue;
        enterprisesDS.SelectParameters["Class"].DefaultValue = classes.SelectedValue;

        string locID = "0";
        if (locations.SelectedValue != null)
            locID = locations.SelectedValue;

        enterprisesDS.SelectParameters["LocationID"].DefaultValue = locID;

        enterprises.DataBind();
    }
4

1 に答える 1

1

これでしょうか?SqlDataSource の CancelSelectOnNullParameter プロパティ。

SqlDataSource とストアド プロシージャ コールの問題

于 2012-05-21T13:13:04.890 に答える