BOOK Preview

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

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

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

Page1 Page2 Page3

10.2.3 特殊クエリの実装方法

 このObjectDataSourceオブジェクトとテーブルアダプタを組み合わせる方法の利点は、ウィザードベースで定義できないような特殊なクエリも実装できるという点である。

 第7章にて解説したように、テーブルアダプタクラスはpartial定義により機能拡張できる(図10-7)。これを利用すると、パラメータ化できるような簡単なクエリはウィザードで定義し、ウィザードで定義できない一部の特殊なクエリはpartial定義により手作業で実装することができる。

図10-7 partial定義を利用したテーブルアダプタクラスの機能拡張

10.2.4 データコンポーネント機能とObjectDataSourceオブジェクトを組み合わせた実装例

 上記の方法を利用して、図10-1にて示したアプリケーションを開発してみよう。

A.partialクラスを利用したデータコンポーネント機能の拡張

 まず、WebサイトにAuthorsDataSet.xsdファイルを追加し、ここにウィザードベースで設定できるクエリをすべて設定しておく(図10-8)。次に、ウィザードベースで設定できないクエリを追加するために、App_Codeフォルダ下にクラスファイルを1つ追加し(図10-9)、リスト10-2のようなコード(partialクラス)を記述する。

図10-8 テーブルコンポーネント機能による標準的なクエリの準備
 
図10-9 partial定義を行うためのクラスファイルの追加
 
C#の場合

using System;
using System.Data;
using System.Data.SqlClient;
using System.ComponentModel;

namespace AuthorsDataSetTableAdapters
{
  // partial 定義による拡張の例
  public partial class authorsTableAdapter
  {
    [DataObjectMethod(DataObjectMethodType.Select)]
    public AuthorsDataSet.authorsDataTable GetDataByTop(int n)
    {
      string query = string.Format("SELECT TOP {0} * FROM authors", n);
      SqlDataAdapter sqlda = new SqlDataAdapter(query, this.Connection);
      AuthorsDataSet.authorsDataTable table = newAuthorsDataSet.authorsDataTable();
      sqlda.Fill(table);
      return table;
    }
    [DataObjectMethod(DataObjectMethodType.Select)]
    public AuthorsDataSet.authorsDataTable GetDataByState2(string state)
    {
      SqlDataAdapter sqlda;
      if (state == "all")
      {
        sqlda = new SqlDataAdapter("SELECT * FROM authors",this.Connection);
      }
      else
      {
        sqlda = new SqlDataAdapter("SELECT * FROM authors WHEREstate=@state", this.Connection);
        sqlda.SelectCommand.Parameters.AddWithValue("@state", state);
      }
      AuthorsDataSet.authorsDataTable table = newAuthorsDataSet.authorsDataTable();
      sqlda.Fill(table);
      return table;
    }
  }
}
VBの場合

Imports System.Data
Imports System.Data.SqlClient
Imports System.ComponentModel

Namespace AuthorsDataSetTableAdapters

  ' partial 定義による拡張の例
  Partial Public Class authorsTableAdapter

    <DataObjectMethod(DataObjectMethodType.Select)> _
    Public Function GetDataByTop(ByVal n As Integer)AsAuthorsDataSet.authorsDataTable
      Dim query As String = String.Format("SELECT TOP {0} * FROM authors", n)
      Dim sqlda As SqlDataAdapter = New SqlDataAdapter(query,Me.Connection)
      Dim table As AuthorsDataSet.authorsDataTable = NewAuthorsDataSet.authorsDataTable()
      sqlda.Fill(table)
      Return table
    End Function

    <DataObjectMethod(DataObjectMethodType.Select)> _

    Public Function GetDataByState2(ByVal state As String) AsAuthorsDataSet.authorsDataTable
      Dim sqlda As SqlDataAdapter
      If state = "all" Then
        sqlda = New SqlDataAdapter("SELECT * FROM authors",Me.Connection)
      Else
        sqlda = New SqlDataAdapter("SELECT * FROM authors WHEREstate=@state", Me.Connection)
        sqlda.SelectCommand.Parameters.AddWithValue("@state", state)
      End If
      Dim table As AuthorsDataSet.authorsDataTable = NewAuthorsDataSet.authorsDataTable()
      sqlda.Fill(table)
      Return table
    End Function

  End Class

End Namespace
リスト10-2 partial定義によるテーブルアダプタクラスの拡張

 以上の準備が終わったら、引き続きWebフォームを作成していく。まず、図10-1の左側の画面から実装方法を示す。

B.上限件数を指定した検索の作成方法

 この場合は、図10-10のような画面を作成し、図10-11のようにObjectDataSourceオブジェクトをテーブルアダプタクラスに接続すればよい。なお、テーブルアダプタクラスに引き渡すメソッド引数は、他のWebコントロールなどから直接入手することができる。

図10-10 上限件数を指定した検索の作成方法
 
図10-11 ObjectDataSourceオブジェクトとテーブルアダプタの連結

C.検索条件が動的に切り替わるようなフィルタリングアプリケーション

 図10-1の右側の画面の場合には、図10-12のような画面を作成し、ObjectDataSourceオブジェクトを介してpartialクラス上のメソッドに連結すればよい。

図10-12 動的にクエリが変化するアプリケーションの実装例

 このように、ObjectDataSourceオブジェクトとデータコンポーネント機能(テーブルアダプタ)を組み合わせると、ウィザードベースでの開発による生産性の高さを得ながら、同時にpartialクラスによる柔軟性の高さを得ることができる。実際の業務アプリケーション開発では、このような開発生産性の高さと柔軟性の高さを併せ持った設計・実装方式を編み出して利用することが大切である。


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

本日 月間