0

私は SqlDataSource を使用しており、コードに長いクエリを直接記述しないようにするために、必要なクエリを文字列として返す Query クラスを作成できると考えました。以下のコードを試してみましたが、「サーバー タグに <% ... %> 構造を含めることはできません」というメッセージが表示されます。

以前はストアド プロシージャを使用していましたが、私の Web ホスティングではそれが許可されていなかったので、Query クラスのソリューションについて考えました。コードビハインドでデータバインディングを行いたくないことも付け加える必要があります。

これを行う方法はありますか?

    <asp:SqlDataSource ID="DS" 
        runat="server"
        DataSourceMode="DataSet"  
        ConnectionString="<%$ ConnectionStrings:conn %>"
        ProviderName="MySql.Data.MySqlClient"
        SelectCommand="<% Query.getTestQuery() %>"
        >
    </asp:SqlDataSource>
4

2 に答える 2

1

ASP.NET でこれを行うことはできません。タグ内のコード<% %>は、プロパティ値を設定するためではなく、任意のコードを実行するためのものです。<%= %>タグ内のコードは、出力ストリームにレンダリングするためのものです。のコード<%# %>は、達成しようとしているものと似ているデータバインディング用ですが、同じではありません。のコード<%$ %>は式バインディング用ですが、ページのライフ サイクルの早い段階で実行されるため、シナリオで機能する可能性は低いです。

ObjectDataSource を使用することは、その時点では単なるコードであり、コードはページの状態に基づいて必要なことを実行できるため、ここに進むための 1 つの方法です。

派生した SqlDataSource を使用することも別のオプションです。SqlDataSource から派生するコントロールを作成し、そのOnInitメソッドをオーバーライドします。このOnInitメソッドでは、SelectCommand を動的に設定して、ページの状態に基づいて必要なことを実行できます。

于 2009-12-29T20:43:06.447 に答える
0

おそらく ObjectDataSource を使用します。そうすれば、オブジェクト内で動的クエリを実行できます。

それ以外の場合は、コード ビハインドで SqlDataSource 選択イベント中に SelectCommand を変更できます。次に、SelectCommand を好きなように変更できます。

于 2009-07-28T10:49:58.963 に答える