@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ワイルドカード(%)

投稿者投稿内容
ryutak
会議室デビュー日: 2004/08/19
投稿数: 11
投稿日時: 2004-08-20 11:11
実行環境:OS:Win2003 server DB:SQL2000Server(standard) DBをWEB参照するのためのツール:VS.net(Enterprise)

初投稿です。よろしくお願いいたします。初心者なので、愚問を投げていてもおこらないでください。
いきなりこの会議室にきてしまったのがそもそも間違いかもしれませんが・・・。

現在データベースをVS.net(言語はVB.net)でつくったアプリで検索するシステムを私ともう一人の技術者で開発中です。

検索の条件は、ユーザーにドロップダウンリスト選択やテキスト入力をしてもらっています。それを独自のSQLアダプター(参考書を元に作成)でSQL SERVERにSELECT文として投げています。

その際、テキスト入力されたものを無条件で前後方一致(部分一致)にしているため、とりこまれた内容に、「%テキスト文字%」としています。(SQL SERVERでのワイルドカードは"*"でなく"%"なので)

デバッグをすすめていくうちにある文字パターンが入力されたときだけVB上で文字化けを起こすことを発見しました。

現時点でみつかっているのは "%ca%"(入力では"ca")となったときに%caの部分がカタカナの"ハ"になってしまうというもの(%cだと正常に検索されます。)と、"%00%"(入力では"00")となった場合に%00が検索文字列に何も指定していないような状態となってしまいます。(しかし検索結果はでてきていてまったく規則性はありません。%0では正常に検索されます。)
上記の検索対象項目はいずれも"文字列"(文字型の項目=string)です。

ちなみにSQL SERVER上で直接この文字列でSQL文を投げても当然ですが正常に検索結果を返します。

他の文字列パターンではでていないようなので、これはこの組み合わせにだけ発生するVB.netの既存バグなのかなと思ってみたりしているのですが・・・。

実はもっと単純なこちらのミスかもしれません。ご存知の方がいたらご教授ください。

コードについては他の検索文字列が正常に動いているので、間違ってはいないと思うのですが、回答の際必要であれば記述させていただきますので仰ってください。

以上よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-20 11:57
引用:

ryutaさんの書き込み (2004-08-20 11:11) より:

実行環境:OS:Win2003 server DB:SQL2000Server(standard) DBをWEB参照するのためのツール:VS.net(Enterprise)

検索の条件は、ユーザーにドロップダウンリスト選択やテキスト入力をしてもらっています。それを独自のSQLアダプター(参考書を元に作成)でSQL SERVERにSELECT文として投げています。

デバッグをすすめていくうちにある文字パターンが入力されたときだけVB上で文字化けを起こすことを発見しました。

(しかし検索結果はでてきていてまったく規則性はありません。%0では正常に検索されます。)


 フレームワークのバグを疑うより、自分が作り込んだバグを疑うのが先のように思うのですが。。。

 最初に、『DBをWEB参照する』とありますが、アプリケーションはどのような形態でしょうか。Windowsアプリケーション or Webアプリケーション?


 次に、『独自のSQLアダプター』というのが気になります。これは、「System.Data.SqlClient.SqlDataAdapter」ではないということでしょうか。


 次に、『ある文字パターンが入力されたときだけVB上で文字化けを起こす』ですが、入力文字が化けているのを、どのようにして知ったのでしょうか。また、『VB上で』というのは、なぜVB上で化けていると判断されたのでしょうか。
 これは、例えば、「デバッグして、インテリセンスで変数の値を見ると『%ca%』が『ハ%』になっていた」とか、「パラメータ値を標準出力に吐き出すようにしているのですが、その吐き出された値が『ハ%』になっていた」というようなことです。
_________________
ryutak
会議室デビュー日: 2004/08/19
投稿数: 11
投稿日時: 2004-08-20 12:08
引用:

Jittaさんの書き込み (2004-08-20 11:57) より:
 フレームワークのバグを疑うより、自分が作り込んだバグを疑うのが先のように思うのですが。。。

 最初に、『DBをWEB参照する』とありますが、アプリケーションはどのような形態でしょうか。Windowsアプリケーション or Webアプリケーション?


 次に、『独自のSQLアダプター』というのが気になります。これは、「System.Data.SqlClient.SqlDataAdapter」ではないということでしょうか。


 次に、『ある文字パターンが入力されたときだけVB上で文字化けを起こす』ですが、入力文字が化けているのを、どのようにして知ったのでしょうか。また、『VB上で』というのは、なぜVB上で化けていると判断されたのでしょうか。
 これは、例えば、「デバッグして、インテリセンスで変数の値を見ると『%ca%』が『ハ%』になっていた」とか、「パラメータ値を標準出力に吐き出すようにしているのですが、その吐き出された値が『ハ%』になっていた」というようなことです。




まったく仰るとおりです。ご指摘の点についてお答えいたします。

A・最初に、『DBをWEB参照する』とありますが、アプリケーションはどのような形態でしょうか。Windowsアプリケーション or Webアプリケーション?

Q.WEBアプリケーションです。

A.次に、『独自のSQLアダプター』というのが気になります。これは、「System.Data.SqlClient.SqlDataAdapter」ではないということでしょうか。
Q.私の認識が間違っていました。使用しているのはあくまで上記のものです。

A.次に、『ある文字パターンが入力されたときだけVB上で文字化けを起こす』ですが、入力文字が化けているのを、どのようにして知ったのでしょうか。また、『VB上で』というのは、なぜVB上で化けていると判断されたのでしょうか。
 これは、例えば、「デバッグして、インテリセンスで変数の値を見ると『%ca%』が『ハ%』になっていた」とか、「パラメータ値を標準出力に吐き出すようにしているのですが、その吐き出された値が『ハ%』になっていた」というようなことです。
Q.VBでコード上にブレークポイントをはりまして、ステップ実行にて確認いたしました。

ちなみに技術的にも質問するのも初心者ですお許しください。
ryutak
会議室デビュー日: 2004/08/19
投稿数: 11
投稿日時: 2004-08-20 12:26
引用:

ryutaさんの書き込み (2004-08-20 12:08) より:
引用:

Jittaさんの書き込み (2004-08-20 11:57) より:
 フレームワークのバグを疑うより、自分が作り込んだバグを疑うのが先のように思うのですが。。。

 最初に、『DBをWEB参照する』とありますが、アプリケーションはどのような形態でしょうか。Windowsアプリケーション or Webアプリケーション?


 次に、『独自のSQLアダプター』というのが気になります。これは、「System.Data.SqlClient.SqlDataAdapter」ではないということでしょうか。


 次に、『ある文字パターンが入力されたときだけVB上で文字化けを起こす』ですが、入力文字が化けているのを、どのようにして知ったのでしょうか。また、『VB上で』というのは、なぜVB上で化けていると判断されたのでしょうか。
 これは、例えば、「デバッグして、インテリセンスで変数の値を見ると『%ca%』が『ハ%』になっていた」とか、「パラメータ値を標準出力に吐き出すようにしているのですが、その吐き出された値が『ハ%』になっていた」というようなことです。




まったく仰るとおりです。ご指摘の点についてお答えいたします。

A・最初に、『DBをWEB参照する』とありますが、アプリケーションはどのような形態でしょうか。Windowsアプリケーション or Webアプリケーション?

Q.WEBアプリケーションです。

A.次に、『独自のSQLアダプター』というのが気になります。これは、「System.Data.SqlClient.SqlDataAdapter」ではないということでしょうか。
Q.私の認識が間違っていました。使用しているのはあくまで上記のものです。

A.次に、『ある文字パターンが入力されたときだけVB上で文字化けを起こす』ですが、入力文字が化けているのを、どのようにして知ったのでしょうか。また、『VB上で』というのは、なぜVB上で化けていると判断されたのでしょうか。
 これは、例えば、「デバッグして、インテリセンスで変数の値を見ると『%ca%』が『ハ%』になっていた」とか、「パラメータ値を標準出力に吐き出すようにしているのですが、その吐き出された値が『ハ%』になっていた」というようなことです。
Q.VBでコード上にブレークポイントをはりまして、ステップ実行にて確認いたしました。

ちなみに技術的にも質問するのも初心者ですお許しください。


どうでもいいことですが、先の投稿でQ&Aが逆転しておりました。ごめんなさい。
ryutak
会議室デビュー日: 2004/08/19
投稿数: 11
投稿日時: 2004-08-20 12:37
お騒がせいたしました。%%をつけるタイミングをかえることにより回避できました。
Jittaさん勉強になりました。今後も投稿すると思いますがよろしくお願いいたします。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-08-20 12:46
引用:

ryutaさんの書き込み (2004-08-20 11:11) より:
現時点でみつかっているのは "%ca%"(入力では"ca")となったときに%caの部分がカタカナの"ハ"になってしまうというもの(%cだと正常に検索されます。)と、"%00%"(入力では"00")となった場合に%00が検索文字列に何も指定していないような状態となってしまいます。(しかし検索結果はでてきていてまったく規則性はありません。%0では正常に検索されます。)
上記の検索対象項目はいずれも"文字列"(文字型の項目=string)です。



%caという文字の並びを見てもしかしたらと思ったのですが、
JittaさんとのやりとりでWebアプリとのことなので間違いなさそうです。
%caは正確には「半角のハ」に化けたのではないですか?

検索文字列に前後%を付けたものをページ間で引き渡していないですか?
ページ間でのデータ引渡しをする場合、そのデータをHttpUtilityクラスのUrlEncodeしておく必要があると思います。
ryutak
会議室デビュー日: 2004/08/19
投稿数: 11
投稿日時: 2004-08-20 13:07
引用:

よねKENさんの書き込み (2004-08-20 12:46) より:
引用:

ryutaさんの書き込み (2004-08-20 11:11) より:
現時点でみつかっているのは "%ca%"(入力では"ca")となったときに%caの部分がカタカナの"ハ"になってしまうというもの(%cだと正常に検索されます。)と、"%00%"(入力では"00")となった場合に%00が検索文字列に何も指定していないような状態となってしまいます。(しかし検索結果はでてきていてまったく規則性はありません。%0では正常に検索されます。)
上記の検索対象項目はいずれも"文字列"(文字型の項目=string)です。



%caという文字の並びを見てもしかしたらと思ったのですが、
JittaさんとのやりとりでWebアプリとのことなので間違いなさそうです。
%caは正確には「半角のハ」に化けたのではないですか?

検索文字列に前後%を付けたものをページ間で引き渡していないですか?
ページ間でのデータ引渡しをする場合、そのデータをHttpUtilityクラスのUrlEncodeしておく必要があると思います。



はじめましてよねKENさん。返答ありがとうございます。
>%caは正確には「半角のハ」に化けたのではないですか?
⇒その通りです。
アドバイスくださった内容は具体的にどうしたらいいのか自分には理解できませんが、そういう方法もあることがわかりためになりました。
今回に限っては%を付加する位置(きっとご指摘の部分と多少関連があるのかと思いますが)を変更することにより回避いたしました。今後ともアドバイスお願いいたします。
okutin
ベテラン
会議室デビュー日: 2003/12/11
投稿数: 98
お住まい・勤務地: 広島
投稿日時: 2004-08-20 13:47
こんにちは。
.NETのことはよく分からないのですが

引用:

ryutaさんの書き込み (2004-08-20 13:07) より:

アドバイスくださった内容は具体的にどうしたらいいのか自分には理解できませんが、そういう方法もあることがわかりためになりました。
今回に限っては%を付加する位置(きっとご指摘の部分と多少関連があるのかと思いますが)を変更することにより回避いたしました。今後ともアドバイスお願いいたします。



本当にこの回避方法でよいのでしょうか?
正しくURLエンコードをやっておかないと今後また同じような問題に遭遇しそうな気がするのですが。
まあ、扱う文字列が半角英数字だけというのなら問題ないのですけど。

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