- PR -

【ASP.NET2.0】QueryStringを使ったWhere句の生成

投稿者投稿内容
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 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 ]
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-07-26 17:59
コード:
:KANRI_NO

の中(値そのもの)に入れるんだったような…。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-26 18:09
掲示板のせいでダブルクォートやシングルクォートがごちゃごちゃになってそう。
文字列の接続の仕方さえ整理できればいけるんじゃないかな。

SelectCommand='SELECT "KANRI_NO" FROM "YOSAN" WHERE ("KANRI_NO" LIKE ''' + :KANRI_NO + ''%'')'

こんな感じだと思うけど、どうだろ。

masakazu
会議室デビュー日: 2006/02/16
投稿数: 9
投稿日時: 2006-07-26 23:35
引用:

Oracle10g



WHERE KANRI_NO LIKE '%' || :KANRI_NO || '%'
ではないでしょうか?
Oracleの文字列連結は || か concat だったような。
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 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 ]
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 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 ]
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-07-27 10:29
さらに【追記】です。

-------------------------------------
SelectCommand='SELECT KANRI_NO FROM D_YOSAN WHERE (KANRI_NO LIKE "'" :KANRI_NO + "%'")'>
-------------------------------------

だと

『サーバー タグが正しく形成されていません。』

となります。


むむむむむ・・・
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-27 10:48
引用:

NGOさんの書き込み (2006-07-27 10:29) より:

コード:

SelectCommand='SELECT KANRI_NO FROM D_YOSAN WHERE (KANRI_NO LIKE "'" :KANRI_NO + "%'")'>




試していないので間違えていたらすみません
コード:

SelectCommand="SELECT KANRI_NO FROM D_YOSAN WHERE (KANRI_NO LIKE :KANRI_NO || '%')">


じゃないですか?


[ メッセージ編集済み 編集者: かるあ 編集日時 2006-07-27 10:48 ]

スキルアップ/キャリアアップ(JOB@IT)