SqlDataSource SelectCommand の書き方

このQ&Aのポイント
  • ASP.NETのSqlDataSourceを使用して、動的にSelectCommandを変更する方法について知りたいです。
  • 変数を使用してWHERE句を動的に作成し、<asp:SqlDataSource>内のSelectCommandに組み込む方法が分かりません。解決策を教えてください。
  • ASP.NETのWebページで、画面遷移ごとに異なるWHERE句を持つSelectCommandを実装したいです。方法を教えてください。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

SqlDataSourceのSelectCommandプロパティに設定されるSQLにパラメータを追加して使用すればいいようですよ SqlDataSourceのデータソース構成ウィザードでクエリビルダを使って SELECT * FROM 台帳 WHERE 種別 LIKE @myShouhin などとパラメータつきのSQLに変更します こうして『次へ』をクリックするとパラメータの定義に移ると思います 名前:myShouhin 値: % にしてウィザードを完了させます 選択を変更したいイベントで SqlDataSource.SelectParameter(0).DefaultValue = "商品A%" GetdView1.dataBind() などを実行してみてください

silk_001
質問者

お礼

redfox63さん できました! 最初はデータソース構成ウィザードの使い方がわからずに意図したものと違う結果になっていたのですが、生成されたaspのコードをヒントに理解できて種別ごとに取得できるようになりました。 最終的にはasp側でVBを記述するのをやめて、生成された<asp:SessionParameter ~ >に合うようにVB側でセッション変数に"商品A%"を設定して実現しました。 このようなプログラム作成は経験が浅くてデータソース構成ウィザードのことも知らなかったのでとても勉強になりました。 どうもありがとうございました!

関連するQ&A

  • 【ASP.net】SqlDataSourceについて

    【ASP.net】SqlDataSourceについて index.aspxページにSqlDataSource1とGridView1と検索ボタンをセットし、 検索ボタンが押されると、SqlDataSource1にセットしているSQLにWHERE文を 追記して、GridView1を再表示させたいのですが、どのようにすれば良いのでしょうか? 現在のソースです・・・。 Dim Str As String = SqlDataSource1.SelectCommand Dim StrSql As String = "" StrSql = " WHERE lbl = ららら " Str = Str & StrSql SqlDataSource1.SelectCommand = Str GridView1.DataSource = SqlDataSource1.SelectCommand GridView1.DataBind() この状態だと、SQL文がBindされてしまい、DBから値がとれません。 解る方いらっしゃいましたらご教授お願いします。

  • SQLDataSourceのSQL文を変えて・・・

    ASP.Net にて日々壁が立ち上がっております。 GridView のデータソースであるSQLDataSourceのSQL文を変更し、尚且つページング、ソーティングも行いたいと思うのですが、なかなかうまく行きません。 Dim SQL As String 条件が複雑なので、SQL には自作したSQL文が入っております。 Me.SqlDataSource.SelectCommand = SQL Me.SqlDataSource.DataBind() このように記述するとGridViewのデータはSQL文に指定した通りに表示されるのですが、ページング、ソーティングを行うと、元々SqlDataSourceに指定してあるSQL文のモノが適応されて表示画面も元データの適応になってしまいます。 何かのサイトでこういう場合は DataSourceID をどうにかすると、ページング、ソーティングともに指定したSQL文のデータソース上で行われるみたいなことが書かれていたのですが、どう記述してよいかわかりません。 例えば・・・ Me.GridView.DataSourceID = "" Me.GridView1.DataBind() Me.GridView1.DataSourceID = Me.SqlDataSource.ID Me.GridView1.DataBind() こんな記述をしてみても、ページング、ソーティングはうまく動作しません。 動的なSQL文をGridViewに適応でき、ソーティング、ページングも適応させるにはどうしたらよいでしょうか? GridView にそういう事が簡単にできれば非常に使い勝手が良いのですが、 初心者的な考えなのかもしれませんが、何卒ご教授いただければと存じます。 よろしくお願い申し上げます。

  • VisualStudio2005でのGridView 集計

    VisualStudio2005でGridViewを使って集計表を出そうと思い下記のSQL文を作成しましたが明細で出てしまいます。 どこが間違っているのでしょうか? ---------------------------------------------------------------- </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:meldandyConnectionString %>" SelectCommand="SELECT DISTINCT [kamoku_code], [kamoku_name], [s_code], [s_name], [kingaku] FROM [a_keihi_dt] WHERE ([kamoku_code] > @kamoku_code2) GROUP BY [s_code], [kamoku_code], [kamoku_name], [s_name], [kingaku] ORDER BY [s_code], [kamoku_code]">

  • htmlでコンボボックスのパラメータを指定したい

    環境 asp.net htmlでコンボボックスをセットしています。 以下のDefaultValueの値をコントロール名にしたいのですがどのように記述すればよいのでしょうか? <asp:SqlDataSource ID="sqlddl1" runat="server" ConnectionString="<%$ ConnectionStrings:xxxConnectionString %>" SelectCommand="SELECT CD, NAME FROM TABLE WHERE (CD = @CD)"> <SelectParameters> <asp:Parameter DefaultValue="123" Name="CD" Type="String" /> </SelectParameters> </asp:SqlDataSource>

    • ベストアンサー
    • HTML
  • ASP.Net ObjectDataSource!

    お世話になります。 現在Access で作成されているアプリケーションをASP.Netに移植する為に日々精進しております。 GridView のデータソースを自由な感じでWhere条件にしたい事から、SQLDataSource から ObjectDataSource に切り替えた方が良いとのご指摘をうけ、現在作業を行っているのですが、問題が発生いたしました。 SQLDataSource ではSelectCommand に自作したSQL文を設定し、バインドすればGridView に反映できたのですが、 ObjectDataSource にはこのようなプロパティがないのですが、どのように設定すればよいのでしょうか? SQLDataSourceのように簡単には設定できず、特殊なやり方じゃないとダメなのでしょうか? なにぶんAsp.Netは初心者なので、何卒お願い申し上げます。

  • SqlDataSource1のドロップダウンリストにページロード時に値

    SqlDataSource1のドロップダウンリストにページロード時に値をいれたいのですが どのようにしたらいいのでしょうか? SqlDataSource にDropDownList1と同じ内容のデータベース 1 りんご 2 みかん 3 ぶどう でページロード時3を指定しているようにしたいのですが 下記ではDropDownList1はできるのですがSqlDataSourceを使っているDropDownList2 では 項目一覧に存在しないため、'DropDownList2' に SelectedValue を指定することは無効です。 パラメータ名: value というエラーがになってしまいます。 どうしたらできるでしょうか? <%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) DropDownList1.Text = "3" DropDownList2.Text = "3" End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>りんご</asp:ListItem> <asp:ListItem>みかん</asp:ListItem> <asp:ListItem>ぶどう</asp:ListItem> </asp:DropDownList> <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource1" DataTextField="MyLike" DataValueField="NO"> </asp:DropDownList> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT [NO], [MyLike] FROM [MyLike]"></asp:SqlDataSource> </div> </form> </body> </html>

  • x.aspxとx.aspx.vbの値の受渡について

    asp.net4で開発を実施しております。 FormViewを使ってデータの登録を行おうとしております。 form1.aspx.vbで設定した変数を、form1.aspx側のsqlにて使いたいと思っているのですが、どのようにすればよいでしょうか? 【form1.aspx.vb】 sub aaa = 1 end sub 【form1.aspx】 : <asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:DB1ConnectionString %>" DeleteCommand="UPDATE Table1 SET [Flg1] = @aaa WHERE [CD] = @CD" <DeleteParameters> <asp:Parameter Name="CD" Type="String" /> <asp:Parameter Name="aaa" Type="String" DefaultValue="<%= aaa %>" /> のように作ってみたのですが、うまくいきません。 どの様にすればよいのかご教示いただければと思います。  よろしくお願い致します。

  • Accessオプションボタン vba case

    どなたか教えて下さい。 Access2002を使っています。 オプションボタンが9個ありオプション値は1~8の数字で商品分類コードが選べるようになっています。 問題は最後のオプション値「9」なのですが、 9を選んだときには総ての商品分類を選びたいのです。 これをCaseとSQLで、作ってみようともったのですが、 select optionCode case 1 1 case 2 2 ・ ・ case 9 true End select そして、sqlに代入させたいのです。 mysql="select * from 商品 " _ & "where 商品分類コード = " optionCode もんだいは、Case文で「true」と使えないことです。 like"*" もしくは -1 など色々して見ましたが エラーになってしまいます。 SQLで総ての条件を出すのにはTRUE以外になにかあるのでしょうか? Caseを使って組みたいのですが、その発想自体がおかしいのでしょうか? 今は、if文で、動かしています。 Caseで動かしたいのです。 どなたか、よろしくお願いします。 aki

  • DropDownListの表示に列連結した文字を表示

    VisualStudio2005で開発しています。 DropDownListの表示に列連結した文字("ORG_ID"&"SHORT_OU_JA")を表示したいのですが、下記ではエラーとなってしまいます。 どのように設定したらよいでしょうか? <asp:DropDownList ID="DropDownList1" unat="server" DataSourceID="SqlDataSource1" DataTextField="ORG_ID"&"SHORT_OU_JA" DataValueField="ORG_ID"> </asp:DropDownList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:meldandyConnectionString %>" SelectCommand="SELECT ORG_ID, SHORT_OU_JA FROM meldandy.WF_ORGANIZATION"></asp:SqlDataSource>

  • C#でアクセスからデータを抽出できません。

    アクセスのデータを部分一致の検索で抽出しようとしていますが、結果が0件になってしまいます。 作成したSQL文は以下のように作成しております。 string selectcommand = string.empty; string testid = "1"; selectcommand = string.Format("select * from TastTable where ID like '*{0}*'", testid); ・アクセスを開いて、結果が0件になるSQL文を直接入力して実行すると正しい結果が返ってきます。  (IDに1が含まれている行が全てヒットします。) ・上記SQL文の「'*{0}*'」を「'{0}'」とすると、ちゃんとIDが1の人のみヒットするので、*がいけない?  でもアクセスに直接SQL文を打ち込むと正しい結果が返ってくるのは何故でしょう・・・ 基本的な質問でしたら申し訳御座いませんが、宜しくお願い致します。

専門家に質問してみよう