解説

実例で学ぶASP.NETプログラミング

第3回 「実プロ流」ASP.NETデータベース操作術

小田原 貴樹(うりゅう)
2003/03/01

Page1 Page2 Page3 Page4 Page5

■データセットを構成するオブジェクトたち

・OleDbConnectionオブジェクト
 実際にデータベースに接続するための各種接続情報(接続子)を格納するオブジェクト。従来のODBCなどに相当するものだと考えればいいだろう。実際にDBMS/DBの製品ごとの差異はここで吸収されているため、今回はAccessを利用しているが、Oracle製品など、ほかのDBMSを利用したい場合でもこのOleDbConnectionオブジェクトを作成し直せばよいということになる。

・OleDbDataAdapterオブジェクト
 データベース内の実際のテーブルやビューなど、各種情報に接続するためのオブジェクト。データセットへ情報を格納するためのSELECT文や、情報をデータベースに対して追加・修正・削除するためのINSERT文・UPDATE文・DELETE文などの各種SQLクエリを内包している。「ADO.NETのデータセットでデータベースを操作するのはDataAdapterオブジェクト」といっても過言ではない。

・DataSetオブジェクト
 ASP.NETなどで、実際にデータの取得・編集を行う対象となるオブジェクト。その名のとおり、データセットそのものである。しかし、このオブジェクトはXML形式で定義された、データを格納するためのテンプレートにすぎない。一般的なデータベースの概念で考えるならば、テーブルやビューのデザイン情報だけが保存されているものだと考えると分かりやすいだろう。DataAdapterオブジェクトを使って実際のデータベースとやりとりを行わない限り、データは存在していない点に注意してほしい。

 また、DataSetオブジェクトの内部には実際のテーブル情報が格納されるDataTableオブジェクトが「複数」格納でき、DataTableクラスの内部にはテーブルの各行を表すDataRowオブジェクトと、列情報を表す DataColumnオブジェクトが格納されている。このあたり、それぞれの連携がややこしく、データセットを習得し始めた段階では、ただデータを表示するのも難解に感じるかもしれない。後ほど、図式付きで解説するので参照してほしい。

・DataViewオブジェクト
 
DataSetオブジェクトは単純に考えれば、データベースにおけるテーブルの役割を果たすが、上述したように「1つのDataSetオブジェクトの中には複数のテーブル情報を格納できる」ために、データ呼び出しの際に、「どのテーブルを指定しているか」をいちいち記述する必要があり、面倒くさい。またDataSetオブジェクトはテーブルの役割を果たすものであり、並べ替え、フィルタなどの機能を持っていないため、利便性に欠ける。

 DataSetオブジェクトのそういう不便さを解決してくれるのが、DataViewオブジェクトだ。名前のとおり、こちらはデータベースにおけるビューの役割を果たしており、並べ替え・フィルタなど、データ表示の際には欠かせない機能を提供している。DataViewオブジェクトそのものは独立したオブジェクトであるが、もちろん単体では何の意味も持たない。あくまで、「DataSetオブジェクトと連携させて使う」ものなので、むしろDataSetオブジェクトの変化形としてとらえる方が分かりやすいだろう。

■「実プロ流」データセット概念定義

 ASP.NETでデータを表示するために必要な、ADO.NETの各オブジェクトについて端的に解説したが、「それがどうした?」と思われた読者の方も多いだろう。オブジェクト指向であるADO.NETでは、もちろんいま解説した各オブジェクトは、クラスとしても関連を持っている。そのため、1つ1つのオブジェクトを個別にとらえたのでは全体像は見えてこないし、実際の利用にも役に立たない。それらのクラス階層を、具体的にデータベースへ接続してデータを表示(もしくは更新)するまでのフローとしてとらえることで、それぞれのオブジェクトの役割がはっきりしてくるだろう。そこで下のフロー図を参照してほしい。

データベースに接続し、データを表示(更新)するまでのフロー

 この図を見ていただくと、だいぶはっきりすると思うが、「実際の利用」という観点でもう1度各オブジェクトを、実プロ(この連載タイトルの略である(笑))流に定義し直すと以下のようになる。

・OleDbConnection オブジェクト
 実際のデータベース固有の情報が格納されている。作成が必須だが、作成してしまえばこのオブジェクト自体を操作することは「基本的にはない」。

・OleDbDataAdapterオブジェクト
 テーブルやビューと関連付け、実際のデータの格納作業を行う。データセットによるデータ操作の際には必須。以下の2つを呪文のごとく覚えていただきたい。

「データを表示する際には、DataAdapterオブジェクトのFillメソッドを使用して、対象となるDataSetオブジェクトにデータを格納する」

「DataSetオブジェクトに格納されたデータを追加・修正・削除し、それを実際のデータベースに反映させたい場合には、DataAdapterオブジェクトのUpdateメソッドを利用する」

 これらの呪文をひっくり返せば、Fillをしない限りDataSetオブジェクトは単に形だけで、データが格納されることはなく、また、Updateをしない限りDataSetオブジェクト内のデータがどれだけ変更されていようと実際のデータベースのデータは変更されない、といえる。

 要は、このあたりの概念によってADO.NETが「非接続型」だといわれる理由となっている。

・DataSetオブジェクト
 DataAdapterオブジェクトのFillメソッドを受け、実際のデータが格納された後、DataSetオブジェクトはそれ自体が仮想的で小さなデータベースそのものだととらえてほしい。この極小のデータベースは、サイトを表示しているユーザーのPCのメモリ上にだけ存在しているものだ。もうちょっと大胆に具体化するならば、「AccessのMDBファイル1つ分に相当する」と考えるとよい。そこから発展させれば、DataTableオブジェクトは「単純に各テーブル」を示し、DataRowオブジェクトはその「テーブルの中の各行の集まり、もしくは行そのもの」を示す、と考えることができる。DataColumnオブジェクトは列に関する情報が格納されているが、この連載では使用していないので、取りあえず「DataColumnオブジェクトのことは忘れてよい」。

 DataSetオブジェクトはAccessのMDBそのものなのだから、複数のテーブルを持つこともできれば、リレーションシップに関する情報も保有できる。しかし筆者は、せっかくバック・エンドにDBMSが存在するのに、コード・レベルでデータベースに関する情報をすべて定義するのは効率が悪いと考えている。よって、「DataSetオブジェクトにはテーブルもしくはビューを1つだけ格納する」を前提に連載を進めていく。

・DataViewオブジェクト
 「DataSetオブジェクトをもっと便利にしたDataSetオブジェクトのコピー・オブジェクト」。とらえ方はこれだけで十分なはずだが、注釈を加えるならば「DataViewオブジェクトは、DataSetオブジェクト内のDataTableオブジェクトと対応する」ということだろう。これはDataViewオブジェクトを利用することで、データを表示するようなコーディングの際にテーブル名などの指定を省略できるということである。細かいことのようだが開発効率の面では無視できない。

 また、前述のように強力なフィルタ・プロパティとソート・プロパティを持っているので、一覧表系のページ作成(検索結果ページなど)では欠かせないオブジェクトだ。余談だが、筆者の主観ではADOというよりは、その前のDAO(Data Access Object)のような機能を提供しているなと感じた。


 INDEX
  実例で学ぶASP.NETプログラミング
  第3回 「実プロ流」ASP.NETデータベース操作術
    1.データベースを利用するための設定(1) - OleDbConnectionオブジェクト
    2.データベースを利用するための設定(2) - OleDbDataAdapterオブジェクト
    3.データベースを利用するための設定(3) - DataSetオブジェクト
  4.データセットを構成する各種オブジェクト
    5.ADO.NETの根幹、データセットの概念 - まとめ
 
インデックス・ページヘ  「解説 :実例で学ぶASP.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間