0

私のシナリオは、asp:SQLDataSource を使用してストアド プロシージャにバインドされた Gridview です。これは、SP を選択し、すべてのデータが表示されたウィザードを使用して迅速に行われました。SP は、4 つのパラメーターを含むように作成されました。そのようなパラメーターが null の場合、クエリ内のすべての値が返されます。

検索機能を作成するために、これらのパラメーターを入力する 3 つのテキスト ボックスとドロップダウン リストを作成し、それらをボタンにバインドしました。特にこのサイトでの調査によって、多くの方法と方法を試しましたが、どれもうまくいかないようです. 私は自分の問題を見つけることができないので、この問題について何か助けていただければ幸いです。以下は私のコードです。

<asp:SqlDataSource ID="sqlSourceID" runat="server" ConnectionString="<%$ ConnectionStrings:DBCONNSTRING%>"
            SelectCommand="storedProcedureName" SelectCommandType="StoredProcedure">                
        </asp:SqlDataSource>

上記は SQL ストアド プロシージャのバインドです。

コントロールを SQL サーバーのパラメーターとしてバインドしようとしました。このコードの前は、SP が null 値を想定していたため、ページは検索パラメーターなしですべてのレコードを正常にロードしていました。今は何も読み込まれません。

            <SelectParameters>
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox1" PropertyName="Text" Name="1" Type="DateTime" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox2" PropertyName="Text" Name="2" Type="DateTime" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox3" PropertyName="Text" Name="3" Type="String" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="ddl1" PropertyName="SelectedText" Name="4" Type="String" />
            </SelectParameters>

コントロール ID はテキストボックス ID を表します

以下は私のコードビハインドです。

        sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
        sqlSourceID.SelectParameters["textbox2"].DefaultValue = this.textbox1.Text;
        sqlSourceID.SelectParameters["textbox3"].DefaultValue = this.textbox2.Text;
        sqlSourceID.SelectParameters["ddl1"].DefaultValue =    Convert.ToString(this.ddl.SelectedText);

それが私の問題です。検索ボタンがクリックされたときにテキストボックスからパラメーターを渡し、ページの読み込み時または何も書き込まれていない場合に null を想定する方法を見つける必要があります。

事前に貢献してくれたすべての人に感謝します。

4

1 に答える 1

1

これで問題が解決することを保証するものではありませんが、問題があるように見えることが3つあります。

  1. Nameタグのプロパティに値1、2、および3を指定しましたasp:ControlParameter。呼び出しているストアドプロシージャに実際に@1、@ 2、および@ 3という名前のパラメータがない限り、これらの名前を、マップするストアドプロシージャのパラメータの名前に変更する必要があります。

  2. 同様に、コードビハインドでは、次のように、コントロール名を使用してのパラメーターを検索しますSqlDataSource.SelectCommand

    sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
    

    ただし、「textbox1」はストアドプロシージャパラメータの名前ではありません。あなたが書いたように、@1はそのパラメータの名前です。名前1、2、および3を保持する場合は、次のようにパラメーター設定を行う必要があります。

    sqlSourceID.SelectParameters["1"].DefaultValue = this.textbox.Text;
    
  3. しかし、コードビハインドでパラメーターの値を設定する必要はまったくないと思います。それがポイントですControlParameter:それは制御プロパティの値を取り、それをコマンドパラメータに割り当てます。役立つ可能性のあるリンクを次に示し ます。SqlDataSourceコントロールとASP.NETDetailsViewおよびControlParameterの例を使用したデータの選択。

これがお役に立てば幸いです。

于 2012-11-06T20:10:20.233 に答える