解説

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

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

小田原 貴樹(うりゅう)
2003/03/01
Page1 Page2 Page3 Page4 Page5

■データセット概念―まとめ

 長々と書いてしまったが、ADO.NETに関しては、その概念がとても重要だ。概念を理解できていないとコーディングの際につまずくことが多くなる。逆に、漠然とでもここで解説したとらえ方が理解できていれば、あとは理論的に組み立てていけるはずだ。データ表示の際の、効率のよいコーディングに関しては連載の中でいろいろ紹介していくので、参考にしてほしい。

データを取得・更新するメソッドの作成

 ADO.NET、特にデータセットに関する概念を説明したところで、このサイトで必要となるデータを取得するためのメソッドを作成してしまおう。

 ここまでに何度か強調したように、データベースから実際のデータを取得するためには、DataAdapterオブジェクトのFillメソッドを利用しなければならない。ショッピング・サイトを構築する場合、商品に関する情報を必要とするページは複数に及ぶ。その1つ1つのページで同じ構文を何度も記述するのは無駄であるし、管理もしにくい。データベースからデータを取得、もしくはデータを更新するためのメソッドを作成し、クラスとしてまとめておけば何か変更があっても、その部分だけを修正すれば済む。それでは、早速コーディングしてみよう。

 先ほどはデザイン・ビューで開いたコンポーネント・クラス(CORE.VB)を、今度はコード・ビューで開く。この中には、すでにロールオーバーに関するクラスも記載しているが、同じように新しいクラスを作成し、コードを入力する。これまでに作成したDataAdapterオブジェクトと、それに対応するDataSetオブジェクトに関するコードを記述していくと以下のようになる。

Public Class DATACON
  Inherits core
  Public Sub FDCA(ByVal DSET As CASET)
    CAADP.Fill(DSET)
  End Sub

  Public Sub UDCA(ByVal DSET As CASET)
    CAADP.Update(DSET)
  End Sub

  Public Sub FDNI(ByVal DSET As NISET)
    NIADP.Fill(DSET)
  End Sub

  Public Sub UDNI(ByVal DSET As NISET)
    NIADP.Update(DSET)
  End Sub

  Public Sub FDPV(ByVal DSET As PVSET)
    PVADP.Fill(DSET)
  End Sub
End Class
コンポーネント・クラス(CORE.VB)に追加するデータベース・アクセス用メソッド

 コードそのものは単純明快、規則としてメソッド名に「FD」が付いているものはFillメソッド、すなわちデータ取得用のメソッドであり、「UD」が付いているものはUpdateメソッド、すなわちデータの更新用のメソッドとしている。

 各メソッドは引数として、それぞれのメソッドに対応したDataSetオブジェクトを「型にして」受け取っている。DataAdapterオブジェクトが持つFill/Updateメソッドのうち、最も単純なオーバーロード(パターンのことだと思っていただきたい)を用い、データを格納するDataSetオブジェクトだけを引数として指定し実行することで、対象のDataSetオブジェクトにデータを格納したり、DataSetオブジェクトから受け取った変更をデータベースに反映させたりしている。

 なぜ、こんな遠回りな処理を行わなければならないのか? それはASP.NETに存在する「オブジェクト指向実装の限界」のためだ。ASP.NETすなわち.NET FrameworkにおけるWebフォームには、Windowsフォームには存在しない制限があるからだ。それは、「ページを移動するたびにオブジェクトは破棄される」もしくは「別のページのオブジェクトを利用することはできない」という重大な制限だ。

 これは例えばトップ・ページで作成したDataAdapterオブジェクトを、商品一覧のページでは利用できないということなのだが、だからといってページごとに必要なDataAdapterオブジェクトを作成していたのでは、同じDataAdapterオブジェクトを何度も作らなければならないことになる。開発効率、コード管理、プログラム・スピード、すべての面においてこれでは問題がある。そのためコンポーネント・クラスにDataAdapterオブジェクトを作成し、メソッドをクラス化して、ほかのページでも汎用的に使い回しているのである。冗長に感じるかもしれないが、間違いなく効率がいいので、ぜひ利用していただきたい。

 ……と、DataAdapterオブジェクトはそれで済むのだが、DataSetオブジェクトの考え方はさらに複雑だ。私自身も当社のほかのプログラマも概念で混乱したので、ついでに筆者流のとらえ方を聞いてほしい。

 [データベースを利用するための設定を行う]の項で、DataAdapterオブジェクトを基にしてGUIベースでDataSetオブジェクトを作成したが、そのときにソリューション・エクスプローラにDataSetオブジェクトに対応したXSDという拡張子のファイルが追加されている。実はここで作成したDataSetオブジェクトは、実際には「オブジェクトとして利用できない」。これはあくまで基になる「型」を作成したととらえるとよいだろう。実際にオブジェクトとして利用する際には、各ページにおいて、「基になる型をベースにDataSetオブジェクトを作成しなければならない」のだ。

 要するにDataSetオブジェクトには、プロジェクトに対して「型」として指定するために作成し、実際の利用時のベース・オブジェクトの役割を果たすものと、実際にデータを格納するためのオブジェクトの2つが存在することになる。DataSetオブジェクト周りの構文ではこの2つのオブジェクトが行ったり来たりするので、このルールが理解できていないと何が何だか分からなくなる。また実際に利用する際にも軽く触れるが、前提としてこの概念を覚えておいていただきたい。

次回予告

 今回はデータセットに関して、使用前の設定と概念をまとめて解説した。恐らく、この連載全体の中でも最も画面での説明が少ない回になるだろうと思う。

 ASP.NETというのは、結局のところWebベース、HTMLベースであるので、「オブジェクト指向」になったといったところで、ホームページ作成の枠をそれほど超えることはない。概念そのものよりも、開発手法やコントロールの利用方法を習得する方が実際的で効果的だろう。しかし、ADO.NETによるデータセット接続はそうはいかない。これはまさしくデータベースというものを「オブジェクト」として完全に定義し直した基盤技術だ。最初のうちはとにかく戸惑うことが多く、これまでに習得しているレコード/カーソル・ベースのデータベース操作技術の方が効率よく思えるかもしれない。だが、データセットについて自分なりの理解が出来上がった途端、この技術の空恐ろしいまでの利便性をきっと感じてもらえると思う。筆者自身はそうだったし、いまでも利用しているとあらためて感心することが多々あるほどだ。

 筆者は、「XML」や「オブジェクト指向」に総称される技術を使いこなすために必要なのは、「自分流の理解」にあると考えている。こういった技術の習得において「文法」などというものは、形式的な表現方法でしかない。より現実世界に近い情報のまとまりを定義するために生み出されたこれらの技術を習得するということは、「ある一定のルールに基づいて表現される世界そのものを、自分のものとする」ことではないだろうか?

 さて戯言はこのくらいにしておく。次回はメイン・フレーム・ページの作成を行う予定だ。データベースから情報を引き出して利用する要素がいくつかあり、今回の設定作業が実際に生かされることになる。メイン・フレーム・ページの作成が終われば、本連載3回にわたったトップ・ページ作成の全体が完成する。

 人目を引きつけ、更新性を感じさせるページ作成のためのノウハウを分かりやすく解説したいと思っているので、ご期待いただければ幸いである。なお、次回も比較的早くお届けできる……はずだ(笑)。End of Article


 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 記事ランキング

本日 月間