こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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 の内容を場合によって変更するにはどのようにしたらよいのでしょうか?

よろしくお願いいたします。

投稿日時 - 2008-05-13 21:24:54

QNo.4020101

困ってます

質問者が選んだベストアンサー

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

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

選択を変更したいイベントで
SqlDataSource.SelectParameter(0).DefaultValue = "商品A%"
GetdView1.dataBind()
などを実行してみてください

投稿日時 - 2008-05-14 09:13:50

お礼

redfox63さん

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

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

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

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

投稿日時 - 2008-05-14 12:36:32

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問