- - PR -
DataReader作動時に配列に格納する方法は?
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-19 13:21
こんにちは。スキルが足らず苦労しています。
データベース(*.MDB)に存在するレコードを、DataReaderにより読込みグラフ作成を試みています。 データ更新は必要ないので、DataAdapterを利用せず直接DataCommandを利用しています。 そこで、構造体配列に格納と同時にレコード件数を取得したいのですが、手持ちの参考書/サイトからはヒットしませんでした。 とりあえず座標変換がうまくいくか試したかったものですから、現在、仮に取っている方法は 一度 While ・・・End で読み込んで件数を取得して、ReDimで配列インデックスを宣言し直してから 再度、読込み配列に格納しています。つまり、2度読みです。 このようなコーディングは無駄な手間だと思っています。 グラフ座標変換などにも使用しますので、DBのレコード件数はどうしても取得したいのです。 また、構造体配列を使用する理由は、同時に表示するグラフフォームが数十種類と多数なことから その方法が自分にとって簡単ということと、DataAdapterとDataCommand.DataReaderの読込み比較で後者のほうが高速だったからです。 レコード件数はDataSetのCountを使い、配列を使わずにDataSetのレコードを使用したほうが良いのか? レコード件数取得と同時に配列に格納する方法があるのか? ADO.Netと配列の知識が初歩的なものしかないので、スマートなコーディングができずに困っています。 どなたかアドバイスをお願いします。 よろしくお願いします。 |
|
投稿日時: 2004-11-19 13:35
カウンターです。
最初に「select count(column1)」でレコード数を取得してRedimするのはどうでしょう? |
|
投稿日時: 2004-11-19 13:58
配列ではなく、コレクションでは駄目なのかな?
|
|
投稿日時: 2004-11-19 14:06
取得したレコードを配列にセットする毎にカウントしていけば良いのでは?
ReDim Preserve〜なら配列にセットした値もクリアされませんし。 |
|
投稿日時: 2004-11-19 14:16
こんにちは。カウンター様、めだか様、いーた様。
返答ありがとうございます。 いずれも、はじめてみる構文です。 今、ざっとネットで調べてみました。 まだ、使い方は理解していませんが、皆様から頂いた新しい知恵で、調べる方向性が定まりました。 MSDNの膨大な量から自分にあったのを探すのに、途方に暮れていました。 とりあえずお礼をと思いレスをお返します。 結果は後ほど報告いたします。ありがとうございました。 |
|
投稿日時: 2004-11-19 15:06
こんなのはどうでしょう。
一度ArrayListにいれてから構造体の配列にする。 ---構造体宣言--- public struct Info { public int id; public string firstName; public string lastName; } ---ここから別--- dr = cmd.ExecuteReader(); if(!dr.HasRows) { throw new ApplicationException("データなし"); } } ArrayList al = new ArrayList(); while(dr.Read()) { Info UserInfo; UserInfo.id = (int)dr[0]; UserInfo.firstName = (string)dr[1]; UserInfo.lastName = (string)dr[2]; al.Add(UserInfo); } Info[] Employees = (Info[])al.ToArray(typeof(Info)); サンプルDB(Northwind)の従業員テーブルを使って試したので 座標に関する構造体にはなっていません。 |
|
投稿日時: 2004-11-19 15:58
こんにちは。聖人様。
わざわざ、サンプルコードまで載せていただいてありがとうございます。 恐縮なのですが、今年10月から独学でVBをはじめたばかりで、このコードは見たことがありません。C#なのでしょうか?じーと見てたら大雑把な意味は、なんとなく分かるのですが・・・。 ひとつひとつ、MSDNやネットで調べながら何とか読解にトライしてみます。 なんともご親切にありがとうございます。 |
|
投稿日時: 2004-11-19 16:58
サンプルはC#です。
しかし、 ・DataReaderからの各項目の値の取り出し方 ・キャスト(型変換) ・ArrayList(動的にObjectを追加できるクラス) ・Type.GetTypeもしくはtypeof ・ArrayList.ToArray を理解すれば、私が書いたコードの意味が分かると思います。 |