- - PR -
【ASP.NET2.0】QueryStringを使ったWhere句の生成
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-26 17:49
いつもお世話になっております。
Windows XP SP2 Oracle10g Visual Web Developer2005(ASP.NET2.0) にて開発をおこなっております。 VWDデザイナ上のSqlDataSourceの「データソースの構成」を使用して作成したSQL文が、上手く動作いたしません。 [検索項目入力]→[検索結果一覧表示]という画面を作成しております。 検索項目入力において 05 という値を入力し、検索ボタンを押すと Response.Redirect("Itiran.aspx?Nendo=" & Nendo) という形でURLに渡して、一覧画面に遷移しております。 一覧画面において、SqlDataSourceとGridViewを作成しました。 SqlDataSourceの[データソースの構成]において、[WHERE句の追加]で 【列:】KANRI_NO 【演算子:】LIKE 【ソース:】QueryString 【QueryStringフィールド:】Nendo を設定したところ、 【SQL式:】"KANRI_NO" LIKE '%' + :KANRI_NO + '%' 【値:】Request.QueryString("Nendo") と画面上に表示されました。 「クエリテスト」の[パラメータ値のエディタ]にて 【値:】05 を入力してみたところ 「ORA-01722:数値が無効です。」 とのエラーが出てしまいます。 SQL文は SELECT "KANRI_NO" FROM "YOSAN" WHERE ("KANRI_NO" LIKE '%' + :KANRI_NO + '%') と生成されております。 LIKE '%' + :KANRI_NO + '%' となっているためエラーが発生していると思うのですが、これをSQL文の最終系で Like '05%' といった形でWhere文を作成したく思います。 [itiran.aspx]の該当箇所は ------------------------------------ <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT "KANRI_NO" FROM "YOSAN" WHERE ("KANRI_NO" LIKE '%' + :KANRI_NO + '%')"> <SelectParameters> <asp:QueryStringParameter Name="KANRI_NO" QueryStringField="Nendo" Type="String" /> </SelectParameters> </asp:SqlDataSource> ------------------------------------ となっております。 SelectCommandのところを修正すれば上手くいくと思われるのですが、 (LIKE '05%'とQueryStringを使わずに、直接値を記入すると上手く動きました) Like '05%' のような形にQueryStringを使ってWHERE句が生成されるように、修正することはできるのでしょうか? 試しに LIKE :KANRI_NO + '%')"> と修正してみたところ、同じエラーがでてしまいました。 LIKE ':KANRI_NO + '%'')"> と修正してみると、 「ORA-01036: 変数の名前/数が無効です。」 とエラーが表示されてしまいます。 なにとぞ、よろしくお願いいたします。 [ メッセージ編集済み 編集者: NGO 編集日時 2006-07-26 18:01 ] | ||||||||||||
|
投稿日時: 2006-07-26 17:59
| ||||||||||||
|
投稿日時: 2006-07-26 18:09
掲示板のせいでダブルクォートやシングルクォートがごちゃごちゃになってそう。
文字列の接続の仕方さえ整理できればいけるんじゃないかな。 SelectCommand='SELECT "KANRI_NO" FROM "YOSAN" WHERE ("KANRI_NO" LIKE ''' + :KANRI_NO + ''%'')' こんな感じだと思うけど、どうだろ。 | ||||||||||||
|
投稿日時: 2006-07-26 23:35
WHERE KANRI_NO LIKE '%' || :KANRI_NO || '%' ではないでしょうか? Oracleの文字列連結は || か concat だったような。 | ||||||||||||
|
投稿日時: 2006-07-27 10:03
返信が遅くなってしまい、申し訳ありませんでした。
ご助言、ありがとうございます。 >>lalupin4様 (値そのもの)に入れるというのは、QueryStringに '05%' というのをいれてしまうということでしょうか? ためしに Response.Redirect("Itiran.aspx?Nendo='05%'") とやってみて、itiran.aspxの'%' の部分を削除してみましたが、上手く動きませんでした。 >>どっとねっとふぁん様 はい。私も最初は、[']["]の整理さえ上手くつけば動くんじゃないの?と楽観的に考えていたのですが、 SelectCommand='SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE ''' + :KANRI_NO + ''%'')' > や SelectCommand='SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE ''' + :KANRI_NO + '%'')' > とitiran.aspxの箇所を変更してみると 『サーバー タグが正しく形成されていません。』 とエラーになってしまいます。 (:KANRI_NO自体が認識されなくなっちゃっている?) >>masakazu様 Oracle10g上の文法の問題というよりは、aspx上での記述の仕方ということになるんだと思います。 ためしに SelectCommand="SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE '05%')"> と直接SQL文に値を埋め込んでしまえば、 Like '05%' がちゃんと動いてくれます。 [ メッセージ編集済み 編集者: NGO 編集日時 2006-07-27 10:22 ] | ||||||||||||
|
投稿日時: 2006-07-27 10:21
【追記】です。
SelectCommand="SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE '05%')"> だと正常に動作するため、その表記にあわせて ---------------------------------------- SelectCommand="SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE ':KANRI_NO%')"> SelectCommand="SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE ' + :KANRI_NO + '%'')"> SelectCommand="SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE ' + :KANRI_NO + %')"> ---------------------------------------- 等とitiran.aspx上を変更してみると 『ORA-01036: 変数の名前/数が無効です。』 とのエラーが表示されました。 どうも :KANRI_NO というQueryStringの部分が認識されていない模様です。 ---------------------------------------- SelectCommand="SELECT KANRI_NO FROM YOSAN WHERE (KANRI_NO LIKE ''' + :KANRI_NO + '%')"> ---------------------------------------- だと 『ORA-01756: 引用符付き文字列が正しく終了していません』 となります。 SQL文自体は全然難しくも無いところなのに・・・ [ メッセージ編集済み 編集者: NGO 編集日時 2006-07-27 10:22 ] | ||||||||||||
|
投稿日時: 2006-07-27 10:29
さらに【追記】です。
------------------------------------- SelectCommand='SELECT KANRI_NO FROM D_YOSAN WHERE (KANRI_NO LIKE "'" :KANRI_NO + "%'")'> ------------------------------------- だと 『サーバー タグが正しく形成されていません。』 となります。 むむむむむ・・・ | ||||||||||||
|
投稿日時: 2006-07-27 10:48
試していないので間違えていたらすみません
じゃないですか? [ メッセージ編集済み 編集者: かるあ 編集日時 2006-07-27 10:48 ] |