BOOK Preview

Microsoft Visual Studio 2005による
Webアプリケーション構築技法

第10章 3階層型自動データバインド

マイクロソフトプレスの書籍紹介ページ
書籍情報(書籍目次)のページ
2006/05/23

Page1 Page2 Page3

 本コーナーは、.NET関連の新刊書籍から主要なチャプターをそのまま転載し、その内容を紹介するものです。

 今回は日経BPソフトプレス/マイクロソフトプレスより2006年5月22日発行の書籍『Microsoft Visual Studio 2005によるWebアプリケーション構築技法―ASP.NET 2.0上での参照系・更新系アプリケーションの設計』より、同社の許可を得てその内容を転載しています。

 本書は、Webアプリ構築の実践的テクニックを網羅し、.NET開発者から高い評価を得ている書籍『.NETエンタープライズWebアプリケーション 開発技術大全』シリーズの著者であるマイクロソフトのコンサルタント赤間氏による新刊書籍です。

 本書では、新しくなったVisual Studio 2005およびSQL Server 2005をベースに、ASP.NET 2.0の基本的な動作や開発方法(第1部)、参照系業務アプリ構築に必要なデータバインド手法(第2部)、更新系業務アプリ構築のための基本的なトランザクション制御方法(第3部)といった中小規模Webアプリの構築技法を一冊にまとめています。

 前回の「7.6 データコンポーネント機能によるデータアクセスコンポーネントの開発」からの転載に続き、本稿では「第10章 3階層型自動データバインド」を転載しています。ここではVisual Studio 2005のウィザードによる2階層型のデータバインドでは対応しきれないデータベース・アクセスについて解説されています。

 具体的には、テーブルアダプタにアクセスする「ビジネス・オブジェクト」を追加し、それをフォームのデータソースとして利用することにより、より柔軟なデータアクセスが可能になります。本稿の最後では、この手法を用いた大量データのページング制御についても紹介されています。

 なお、書籍の詳細については書籍情報のページをご覧ください。

ご注意:本記事は、書籍の内容を改訂することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

 前章で解説した2階層型自動データバインドは極めて便利な機能である。しかし、ウィザードベースでSQL文を定義しなければならない関係上、バックエンドのデータベースサーバーに対して柔軟なSQL文発行を行うことができない。本章では、特殊なSQL文によるデータ取得を可能とするようなデータバインド手法を学習する。

10.1 2階層型自動データバインドの限界

 業務アプリケーションの大半は、前章で解説した2階層型自動データバインド(SqlDataSourceオブジェクトを利用したデータバインド)のみで開発を進めることができるだろう。しかし実際の業務アプリケーション開発では、以下のような特殊なクエリが混ざっていることが多い(図10-1)。

  • パラメータ化できない可変値を持つクエリ
    • 例:SELECT TOP @top * FROM authors
    • TOP句はパラメータ化できないため、このクエリはSqlDataSourceオブジェクト上に定義できない。
  • 条件に応じて動的に変化するWHERE句を持つクエリ
    • 指定された検索条件を基に、動的にWHERE句を組み立てるような業務
図10-1 2階層型自動データバインド方式では開発できない業務アプリケーションの例

 実際の業務アプリケーションでは、往々にしてこのような「ウィザードベースでは開発できない」処理が少ないながらも混ざっている。しかし、このような処理があるからといって、ウィザードベースでの開発を全面的に諦めてしまうと、開発生産性を高めることができない。

10.2 ObjectDataSourceを用いたデータバインド

 この問題は、データコンポーネント機能(.xsdファイル)とObjectDataSourceオブジェクトとを組み合わせることにより解決できる。しかし、これを一気に解説することは困難であるため、順を追って解説する。

  • ObjectDataSourceオブジェクトを利用したデータバインド
  • ObjectDataSourceオブジェクトからのテーブルアダプタの呼び出し
  • 特殊クエリの実装方法
  • データコンポーネント機能とObjectDataSourceオブジェクトを組み合わせた実装例

10.2.1 ObjectDataSourceオブジェクトを利用したデータバインド

 前章では、GridViewコントロールなどに対してデータを供給するオブジェクトとして、SqlDataSourceオブジェクトを利用した。しかし、ここで解説するObjectDataSourceオブジェクトを利用すると、型付きデータセット(または型付きデータテーブル)を返すようなクラスを、データソースとして利用できるようになる。

 ObjectDataSourceオブジェクトを利用する方法を図10-2に示す。あらかじめ、データ入出力を行うデータアクセスクラスまたはビジネスロジッククラスをC#またはVBのコードとして用意しておき(リスト10-1)、これをObjectDataSourceオブジェクトから呼び出すように設定する。このようにすると、自前で作成したクラスを利用して、自由にSQL文を発行することができるようになる※1

※1 データの入手方法はデータベースからだけとは限らない。例えば、XML Webサービスから入手したデータを返すようなクラスを作成し、これをObjectDataSourceコントロールにより連結しても構わない。
 
図10-2 ObjectDataSourceオブジェクトの利用
 
C#の場合

public class DataAccessComponent {

  public DataAccessComponent() {}

  [DataObjectMethod(DataObjectMethodType.Select)]
  public AuthorsDataSet.authorsDataTable GetData() {
    AuthorsDataSet ads = new AuthorsDataSet();
    authorsTableAdapter ta = new authorsTableAdapter();
    ta.Fill(ads.authors);
    return ads.authors; // データベースから取得したデータを型付きデータテーブルとして返す
  }
}
VBの場合

Public Class DataAccessComponent
  <DataObjectMethod(DataObjectMethodType.Select)> _
  Public Function GetData() As AuthorsDataSet.authorsDataTable
    Dim ads As New AuthorsDataSet()
    Dim ta As New authorsTableAdapter()
    ta.Fill(ads.authors)
    Return ads.authors ' データベースから取得したデータを型付きデータテーブルとして返す
  End Function
End Class
リスト10-1 Hello World ASP.NETアプリケーション

10.2.2 ObjectDataSource オブジェクトからのテーブルアダプタの呼び出し

 さて、ObjectDataSourceオブジェクトに接続するクラスは、以下のような条件を満たしている必要がある。

  • デフォルトコンストラクタを持つ。
  • 型付きデータセットまたは型付きデータテーブルを返すメソッドを持つ。
  • (可能であれば)DataObjectMethod属性により、各メソッドの種類が示されている※2
※2 このメソッド属性が付与されていると、ObjectDataSource構成ウィザードに当該メソッドを認識させることができる。

 実は、第7章で学習したデータコンポーネント機能(.xsdファイル)によって生成されるテーブルアダプタクラスは、これらの条件を全て満たしている。よって、ObjectDataSourceオブジェクトの背後にこのテーブルアダプタクラスを連結して利用することができる(図10-3)。

図10-3 テーブルアダプタクラスとObjectDataSourceオブジェクトの連結

 例えば図10-4に示すアプリケーションは、以下のようにしても実装できる。

  • 当該Webサイトに.xsdファイルを追加し、州の一覧を取り出すクエリと、データを取り出すクエリを定義する(図10-5)。
  • 画面上にObjectDataSourceオブジェクトとWebコントロールを貼り付ける。
  • ObjectDataSourceオブジェクトのデータソース構成ウィザードを開き、作成したテーブルアダプタ上のメソッドを紐付ける(図10-6)。
図10-4 データをフィルタリングする機能を持つデータバインドアプリケーション
 
図10-5 ObjectDataSourceオブジェクトを用いた3階層自動データバインドを利用する際の設計
 
図10-6 ObjectDataSourceオブジェクトのデータソースの構成

 このようにすれば、第2部「9.3.4 フィルタリング」にて解説したアプリケーションを、3階層型自動データバインドにより開発することができる。

 

 INDEX
  Microsoft Visual Studio 2005によるWebアプリケーション構築技法
  第10章 3階層型自動データバインド
  1. 10.1 2階層型自動データバインドの限界
    2. 10.2.3 特殊クエリの実装方法
    3. 10.3 ObjectDataSourceオブジェクトを用いた大量データのページング制御
 
インデックス・ページヘ  「BOOK Preview」


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

本日 月間