ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:silk_001 SqlDataSource SelectCommand の書き方
困り度:
  • 困っています
はじめまして。
現在aspx側でDBから読み込んだデータをGridViewに表示するプログラムを作っています。

環境
SQL Server 2005 Express Edition
Visual Studio 2005
ASP.NET(VB)

初期表示として前の画面で選ばれた種別によってSQLが変わるので .aspxで

<%
dim s as string = "SELECT * FROM 台帳 "
select case session("kind")
case "A"
s &= "WHERE 種別 LIKE '商品A%' "
case "B"
s &= "WHERE 種別 LIKE '商品B%'"
case else
' 全種別を取得
end select
hyo_1.SelectCommand = s & "ORDER BY 種別"
%>
<asp:SqlDataSource ID="hyo_01" runat="server" ConnectionString="<%$ ConnectionStrings:ConStr %>" />
と記述してみたのですが、結果は、何も表示されませんでした。
(順序を逆にしてみてもダメでした)

この場合、<asp:SqlDataSource 〜 /> で SelectCommand はクリアされてしまうのでしょうか?
<asp:SqlDataSource 〜 の中で SelectCommand="SELECT 〜 " としたときに変数に入れたWHERE句を途中に埋め込むことがどうやってもできなかったので苦し紛れにやってみたのですが、、、

変数 whr="'商品A%'"として <asp:SqlDataSource 〜 の中で
SelectCommand="SELECT * FROM 台帳 WHERE 種別 LIKE <% = whr %> ORDER BY 種別" />
とするとエラーになってしまうし、いろいろ検索してみたのですが解決できませんでした。

SelectCommand の内容を場合によって変更するにはどのようにしたらよいのでしょうか?

よろしくお願いいたします。
質問投稿日時:08/05/13 21:24
質問番号:4020101
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:redfox63 SqlDataSourceのSelectCommandプロパティに設定されるSQLにパラメータを追加して使用すればいいようですよ

SqlDataSourceのデータソース構成ウィザードでクエリビルダを使って
SELECT * FROM 台帳 WHERE 種別 LIKE @myShouhin
などとパラメータつきのSQLに変更します
こうして『次へ』をクリックするとパラメータの定義に移ると思います
名前:myShouhin
値: %
にしてウィザードを完了させます

選択を変更したいイベントで
SqlDataSource.SelectParameter(0).DefaultValue = "商品A%"
GetdView1.dataBind()
などを実行してみてください
種類:回答
どんな人:専門家
自信:自信あり
回答日時:08/05/14 09:13
回答番号:No.1
この回答へのお礼redfox63さん

できました!
最初はデータソース構成ウィザードの使い方がわからずに意図したものと違う結果になっていたのですが、生成されたaspのコードをヒントに理解できて種別ごとに取得できるようになりました。

最終的にはasp側でVBを記述するのをやめて、生成された<asp:SessionParameter 〜 >に合うようにVB側でセッション変数に"商品A%"を設定して実現しました。

このようなプログラム作成は経験が浅くてデータソース構成ウィザードのことも知らなかったのでとても勉強になりました。

どうもありがとうございました!