- PR -

ワイルドカード検索について。

投稿者投稿内容
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-02-25 11:52
初心者なのでなにかと無知ではありますが、
皆様のご意見をいただければ幸いです。

ただ今私は、SELECT A,B,C FROM D WHERE Id LIKE '%5%'

のようにして、ヒットしたものをgetString(0)などとし、
ひとつずつプロパティにセットし、それをArrayListとして返すクラスを作っています。

しかし、ひとつずつArrayListに格納するのがなかなかうまくいかず悩んでいます。

Dim reader As DbDataReader = command.ExecuteReader()
とし、If reader.Read() や、Do While reader.Read()
をつかって、たとえば 
CLASS.PROPERTY1 =reader.GetString(0)
CLASS.PROPERTY2 =reader.GetString(1)
ARRAYLIST.Add(CLASS)

のようにしても意図するような値が返ってきません。
みなさまのご意見ご指摘などいただければ幸いです。
よろしくお願いいたします。

ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-02-25 13:02
デバッグはしていますか? ご自分でどこまで確認されていますか?

「意図するような値が返ってきません」と言われても、回答者側では hoshino さんがどのような値が返ってくることを想定しているのか分かりません。

現在、何をどこまで確認し、何を期待しているのかを具体的に書いてみてはいかがでしょう。
THREE-ONE
常連さん
会議室デビュー日: 2006/08/17
投稿数: 36
投稿日時: 2007-02-25 13:06
> 意図するような値が返ってきません。
ここが重要です。
どのような値が返ってきて、どのように意図されていない値なのでしょうか?

「ワイルドカード検索について」とあるので、SELECT 文の結果が意図しないデータということでしょうか?
それとも、クエリの結果が DataReader から正しく取得できないということでしょうか?
hoshino
常連さん
会議室デビュー日: 2007/02/21
投稿数: 46
投稿日時: 2007-02-25 13:22
みなさまご指摘ありがとうございます。
説明不足、大変失礼いたしました。

フォーム画面のTextBoxに入力された値を、'%text%'
の形でDBに検索をかけます。
そしてひっとした値を一つずつArrayListに格納し、
フォーム画面のGridViewなどにバインドさせたいと思っています。
デバッグが通り、値がバインドされても一番最初にヒットした列が複数バインドしていたり、一番最後にヒットした値が複数バインドされたりしてしまいます。

私が意図しているのは、TextBoxに入力された文字列を含むデータを抽出して一つずつバインドさせたいのです。

DataReader からは正しく取得できているのですが、TextBoxの文字列を含むデータをすべて一つずつバインドする式に悩んでいます。

これでわかっていただけるでしょうか?
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-02-25 13:57
正直、私には未だに何をしたいのかが分かりません。。。

GridView にデータバインドさせたいのなら、DataSource に DataTable などをセットしてバインドすればいいのでは?

最終的にはフォーム画面の GridView にデータをセットしたいのだと考えますが、それを DataReader で1件ずつ取得する必要性が見えません。
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2007-02-25 14:07
引用:

hoshinoさんの書き込み (2007-02-25 11:52) より:

しかし、ひとつずつArrayListに格納するのがなかなかうまくいかず悩んでいます。



引用:

hoshinoさんの書き込み (2007-02-25 13:22) より:

デバッグが通り、値がバインドされても一番最初にヒットした列が複数バインドしていたり、一番最後にヒットした値が複数バインドされたりしてしまいます。



ArrayListに格納できないのか、バインドできないのかどちらなのでしょうか?

引用:

DataReader からは正しく取得できているのですが、



DataReaderから正しく取得できているのであれば、
hosinoさんが仰る
CLASS.PROPERTY1 =reader.GetString(0)
CLASS.PROPERTY2 =reader.GetString(1)
はうまく動作しているということですよね?

いずれにせよ、ちょっとわかりにくいですね...

_________________
--------------------------------------------
HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています
HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ
きよの
常連さん
会議室デビュー日: 2004/02/07
投稿数: 34
投稿日時: 2007-02-25 14:23
引用:

hoshinoさんの書き込み (2007-02-25 11:52) より:
CLASS.PROPERTY1 =reader.GetString(0)
CLASS.PROPERTY2 =reader.GetString(1)
ARRAYLIST.Add(CLASS)



CLASS が何かのクラスのインスタンスを指す変数だとして、各行ごとにこのインスタンスを生成していないのでは? と推測してみます。
コード:
Do While reader.Read() 
  ...
  Dim CLASS As New 何とかクラス '←これが無いのでは?
  CLASS.PROPERTY1 =reader.GetString(0) 
  CLASS.PROPERTY2 =reader.GetString(1)
  ARRAYLIST.Add(CLASS)



とりあえず、今どのようなコードになっているのかをもう少し具体的に開示していただけないと答えにくいです。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-02-25 14:27
変数CLASSへのインスタンスの作成がDo While ループの外で
1回だけ行われているのが原因じゃないかなと思います。
#まぁソース見てないのではずしてるかもしれませんが

<追記>
きよのさんとかぶってしまった・・・orz
</追記>


[ メッセージ編集済み 編集者: よねKEN 編集日時 2007-02-25 14:28 ]

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