第3回 テーブルアダプタの基礎:連載:Visual Studio 2005によるWindowsデータベース・プログラミング(3/3 ページ)
SQL文を記述するだけでDBのアクセス処理をすっきりと実装できる新機能「テーブルアダプタ」。VB 2005で使ってみよう。
■レコード件数の取得を行うクエリの追加
最後に、レコード件数の取得を行うクエリの作成方法も簡単に見ておきましょう。先ほどと同様にしてテーブルアダプタで[クエリの追加]を実行し、今度は次のような手順でCountAll()クエリを追加します。
「単一の値を返すSELECT」を選択
メソッド名として「CountAll」を指定
これによりテーブルアダプタは次のようになります。
このCountAll()クエリを呼び出して、例えばラベルに検索結果を表示するには次のようなコードを記述します。
Label1.Text = Me.taAddress.CountAll()
すでに述べたようにFillメソッドの戻り値も取得されたレコードの件数となりますが、レコード件数を得るだけならこのようなクエリを追加します。ちなみに、すでにデータテーブルに全レコードを取得している場合には、次のようにしてデータテーブル内の行数を得ることもできます。
Label1.Text = Me.dsAddress.MyTable.Rows.Count
【コラム】アプリケーション・アーキテクチャにおけるテーブルアダプタの位置付け
業務アプリケーションを設計する際には、アプリケーション構造の見通しを良くし、保守性を高めるために、アプリケーション構造を階層化し、各処理をコンポーネントに分割して設計することが推奨されます。いわゆる「アプリケーション・アーキテクチャ」と呼ばれるものです。
データセットとテーブルアダプタによるデータベース・アクセスは、.NETで推奨されているアプリケーション・アーキテクチャに従っているといえます。以下の図は、.NETで推奨されている論理アーキテクチャ・モデルとの対応付けです。
図20 データセットとテーブルアダプタと推奨される論理アーキテクチャとの対応
データセット(データテーブル)は、業務データのコンテナである「ビジネス・エンティティ・コンポーネント」に該当する。また、データベースへのアクセスをまとめたテーブルアダプタは「データアクセス・ロジック・コンポーネント」に該当する。
まずここでポイントとなるのは、アプリケーション内で実際にデータベースにアクセスする処理をすべてテーブルアダプタとして実装し、できる限りまとめておくという点です。業務処理(ビジネス・ロジック)内で直接データベースにアクセスしたり、(もっとひどい場合には)ボタンのイベント・ハンドラでデータベースにアクセスしたりということをしないようにします。
また、テーブルアダプタにより取得されたデータは、データテーブルあるいはデータセットとして、各階層間で受け渡しを行います。ビジネス・エンティティ・コンポーネントは単なるデータの入れ物でビジネス・ロジックを持たせないという点もポイントとなります。
もちろん、上図の論理アーキテクチャは主に大規模な分散アプリケーションの構築を想定しているので、必ずしも本連載が対象としているような業務アプリケーションにはぴったりと当てはまらないかもしれません。しかしアプリケーション・アーキテクチャというものは成功事例に基づいて作成された「パターン」ですから、頭の片隅にでも入れておけば、どうやって実装しようかと迷ったときの参考になると思います。
今回見てきたように、データセットと同様に、テーブルアダプタもデザイン画面だけで作ってしまえるところがVisual Studio 2005の優れたところです。論理アーキテクチャでいえば、ビジネス・ロジックより下の階層はコードを書かずに構築できるわけです。
さて次回では、データセットに取得したデータの表示について解説していく予定です。前回や今回ではDataGridViewコントロールとデータテーブルを直接データ連結してデータを表示しましたが、実際にはVisual Studio 2005の新しいコントロールである「BindingSourceコントロール」を介してデータ連結するのが一般的です。このコントロールを中心に見ていきます。
なお、今回ではテーブルアダプタに関して参照系についてしか解説していませんが、当然ながらデータベースの更新処理についてもテーブルアダプタで実装されます。また、ウィザードによるクエリの追加だけではすべてのデータベース処理の実装を賄うことはできないため、いくつかの拡張方法も用意されています。これらについては回を改め、次回以降で解説する予定です。
Copyright© Digital Advantage Corp. All Rights Reserved.