- PR -

DataReader作動時に配列に格納する方法は?

投稿者投稿内容
SSD
会議室デビュー日: 2004/09/20
投稿数: 15
投稿日時: 2004-11-19 13:21
こんにちは。スキルが足らず苦労しています。
データベース(*.MDB)に存在するレコードを、DataReaderにより読込みグラフ作成を試みています。
データ更新は必要ないので、DataAdapterを利用せず直接DataCommandを利用しています。

そこで、構造体配列に格納と同時にレコード件数を取得したいのですが、手持ちの参考書/サイトからはヒットしませんでした。
とりあえず座標変換がうまくいくか試したかったものですから、現在、仮に取っている方法は
一度 While ・・・End で読み込んで件数を取得して、ReDimで配列インデックスを宣言し直してから
再度、読込み配列に格納しています。つまり、2度読みです。

このようなコーディングは無駄な手間だと思っています。

グラフ座標変換などにも使用しますので、DBのレコード件数はどうしても取得したいのです。
また、構造体配列を使用する理由は、同時に表示するグラフフォームが数十種類と多数なことから
その方法が自分にとって簡単ということと、DataAdapterとDataCommand.DataReaderの読込み比較で後者のほうが高速だったからです。

レコード件数はDataSetのCountを使い、配列を使わずにDataSetのレコードを使用したほうが良いのか?
レコード件数取得と同時に配列に格納する方法があるのか?
ADO.Netと配列の知識が初歩的なものしかないので、スマートなコーディングができずに困っています。

どなたかアドバイスをお願いします。
よろしくお願いします。
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-11-19 13:35
カウンターです。

最初に「select count(column1)」でレコード数を取得してRedimするのはどうでしょう?
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2004-11-19 13:58
配列ではなく、コレクションでは駄目なのかな?
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-11-19 14:06
取得したレコードを配列にセットする毎にカウントしていけば良いのでは?
ReDim Preserve〜なら配列にセットした値もクリアされませんし。
SSD
会議室デビュー日: 2004/09/20
投稿数: 15
投稿日時: 2004-11-19 14:16
こんにちは。カウンター様、めだか様、いーた様。
返答ありがとうございます。

いずれも、はじめてみる構文です。
今、ざっとネットで調べてみました。
まだ、使い方は理解していませんが、皆様から頂いた新しい知恵で、調べる方向性が定まりました。
MSDNの膨大な量から自分にあったのを探すのに、途方に暮れていました。

とりあえずお礼をと思いレスをお返します。
結果は後ほど報告いたします。ありがとうございました。
聖人@SKB
ベテラン
会議室デビュー日: 2003/03/26
投稿数: 58
お住まい・勤務地: 横浜(MM21)勤務の筈だがいつも顧客先常駐
投稿日時: 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)の従業員テーブルを使って試したので
座標に関する構造体にはなっていません。
SSD
会議室デビュー日: 2004/09/20
投稿数: 15
投稿日時: 2004-11-19 15:58
こんにちは。聖人様。
わざわざ、サンプルコードまで載せていただいてありがとうございます。

恐縮なのですが、今年10月から独学でVBをはじめたばかりで、このコードは見たことがありません。C#なのでしょうか?じーと見てたら大雑把な意味は、なんとなく分かるのですが・・・。

ひとつひとつ、MSDNやネットで調べながら何とか読解にトライしてみます。
なんともご親切にありがとうございます。
聖人@SKB
ベテラン
会議室デビュー日: 2003/03/26
投稿数: 58
お住まい・勤務地: 横浜(MM21)勤務の筈だがいつも顧客先常駐
投稿日時: 2004-11-19 16:58
サンプルはC#です。
しかし、
・DataReaderからの各項目の値の取り出し方
・キャスト(型変換)
・ArrayList(動的にObjectを追加できるクラス)
・Type.GetTypeもしくはtypeof
・ArrayList.ToArray
を理解すれば、私が書いたコードの意味が分かると思います。

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