SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ASP.NETでのデータベース検索ページの作成に役立つ13のヒント

C# 2.0、.NETジェネリック、ストアドプロシージャを組み合わせた手法

  • このエントリーをはてなブックマークに追加

ASP.NET 2.0、SQL Server 2005、C#の.NETジェネリックの新機能を使ってデータベース検索用のWebページを作成します。

  • このエントリーをはてなブックマークに追加

はじめに

 データベースの検索画面とナビゲーション画面は、アプリケーションの他の部分に比べると、最初はとても簡単そうに見えます。しかし、すべてのユーザーの要望や要求に応えようとすると思いのほか時間がかかります。

 この記事では、ASP.NET 2.0、SQL Server 2005、C# 2.0を使って、検索用のWebページを作成します。検索と結果のページでは、オプションの検索条件を表示し、結果セットのカスタムページングを行います。このソリューションでは、ランキング番号を生成するSQL 2005の新しい言語機能を利用して、カスタムページングとの関連付けを行います。また、.NETジェネリックの新機能を利用して、ストアドプロシージャの結果をカスタムコレクションに出力します。ミヤギ師匠が練習をとおしてダニエルに技を教えたように、この記事の例では、ファクトリ作成パターンなど、.NETジェネリックを使ったいくつかの一般的なデザインパターンを示します。この記事では、データベースのWebページを作成する上での一般的な方法論にも触れます。

最終的な完成イメージ

 さて、本題に入りましょう。この記事では、検索および結果/ナビゲーションの画面を作成します(図1、2、3を参照)。

図1 検索結果の1ページ目。ユーザーはさまざまな条件で検索を実行でき、複数ページにまたがる結果を見ることができる。
図1 検索結果の1ページ目。ユーザーはさまざまな条件で検索を実行でき、複数ページにまたがる結果を見ることができる。
図2 LastName列を基準にして既定のソート/ページングを行い、文字「K」にジャンプした結果。
図2 LastName列を基準にして既定のソート/ページングを行い、文字「K」にジャンプした結果。
図3 Address列を基準にしてソート/ページングを行い、5ページ目にジャンプした結果。
図3 Address列を基準にしてソート/ページングを行い、5ページ目にジャンプした結果。

 これから説明する13のヒントを通じて、最終的に次の状態を実現します。

  • 検索画面で求められる要件を明確化し、それぞれの要件についての解決方法を決める。
  • すべてのセッション変数とストアドプロシージャのパラメータを定義する。
  • オプションの検索パラメータをすべて処理するストアドプロシージャコードを記述する。
  • SQL 2005の新しいランキング関数を使って、ランキングとページングを統合するストアドプロシージャコードを記述する。
  • SQL 2005の共通テーブル式を実装して、クエリと連携する。
  • C#でデータアクセス層(DAL)を作成する。
  • 基本のASP.NET 2.0 Webページを作成する。
  • クイック検索ナビゲーションおよびページングを処理するASP.NET 2.0コードを作成する。
  • 列のソートを処理するページを作成する。
  • グリッド結果セットおよび結果情報を設計する。
  • ページの列を別のページへのリンクとして設定する。
  • ユーザーがリストに対して可変個数の選択を行うことができるように、アプリケーションを変更する。
  • カスタムオブジェクトに出力するようにDALを変更する。

 最後に、付録として、.NETジェネリックを利用し、匿名メソッドでソートを処理するコードを示します。

説明は少なく、コードは多く

 私は、この記事を執筆するに際して、新年の誓いを立てました(この記事を執筆している時点で、2006年がまだ数日残っています)。それは、「説明は短く、コードは長く」です。私が.NETについて学びだして数年経ちますが、非常に参考になった書籍や記事は、有意義なコードサンプルが記載されているものでした。そこで、どのヒントでも、余計なおしゃべりはできるだけ控えて、具体的なコードを紹介するようにします。

ヒント1: 要件の明確化

 例えばブラウザベースの電子メールWebページなど、任意の列でソートでき、Next/Previousリンクまたはページ番号のリンクでページ間をナビゲートするWebサイトを利用したことはありませんか。たまに使うのであれば、このような一般的なナビゲーション設計でも十分です。

 しかし、「R」という文字で始まる特定の行や項目を表示したい場合はどうでしょうか。多分、降順で列をソートし、目的の項目に達するまでNextリンクをクリックするか、目的の項目が何ページ目にあるかを推測することになるでしょう。これはまるで、値段当てを競うテレビ番組のようです。出場者が「500」と言うと司会者が「もっと高い」と言い、出場者が「550」と言うと司会者が「もっと安い」と言います。出場者が本当の値段を言い当てるまで(またはブザーが鳴るまで)、値の増減が繰り返されます。

 このことは、この記事のサンプルプロジェクトのテーマであるナビゲーションにそのまま当てはまります。よくないデザインパターンを言い表すときに「空振り」という表現を使いますが、ユーザーが余計なナビゲーション操作をしなければならないWebページも、そうしたよくないデザインの一例です。もちろん、外見的に優れたデザインのWebページはユーザーを魅了しますが、リピーター率が高いのはナビゲーション部分がきちんと整備されているWebページです。

 この記事では、図1、2、3のようなWebページを作成する方法について説明します。このソリューションには、次の機能が含まれます。

  • 名前、住所、市、州、郵便番号の検索パラメータに基づいて、50万行から成る顧客テーブルで検索を実行できる。部分テキスト検索も可能(例えば、「City」列で「HAMILTON」を検索すると、「123 HAMILTON BLVD」がヒットする)。
  • 結果はページンググリッドに表示され、一度に表示される最大行数(MAXROWS)を設定できる。
  • Next/Previous/Top/Bottomボタンでページをナビゲートできる。
  • 列見出しをクリックして列をソートできる。
  • 現在の列のソート基準に基づいて、特定の結果セットにクイックジャンプできる。
  • 例えば、「City」列を基準として文字「A」が先頭に来る順序で顧客を表示しているときに、文字「M」で始まる値を「City」列に含んでいる最初の顧客データにクイックジャンプできる。「City」列の値が「M」で始まる顧客データの数がMAXROWSより少ない場合は、「M」で始まるすべての行と、それ以降の行がMAXROWSに達するまでページに表示される。
  • クイックジャンプ用のコントロールはプルダウン形式であり、選択項目はアルファベットの各文字または1桁の数字から成る。

 この実装について、もう少し説明しておきます。おそらく、ここで挙げた機能のほとんどは最新バージョンのASP.NETないしサードパーティのWebグリッドに含まれているのではないかと思った人もいることでしょう。部分的にはそうなのですが、すべての要件を満たすためには、多少の努力が必要です。今回のソリューションでは、SQL 2005のストアドプロシージャ、ASP.NET 2.0のGridView、そしてC# 2.0のコードを使ってこれを作成します。図4は、このWebサイトの開発ソリューション全体を示しています。全体的なプランは次のとおりです。

  1. 検索ページのすべての入力条件と変数を明確化し、ストアドプロシージャのパラメータを確定する。
  2. T-SQL 2005の新しいランキング関数を利用してページングパラメータと関連付けるストアドプロシージャを作成し、テストする。
  3. Webページとストアドプロシージャとのやり取りに使用するデータアクセスクラスをC#で作成する。
  4. すべてのWebページ動作(グリッド結果のフォーマット、ページナビゲーション、ページコントロール、変数など)を処理するWebページを設計し、C#の分離コード(コードビハインド)を作成する。
  5. DataSetまたはカスタムコレクションを返す基本のデータアクセス層を設定する。
図4 Webサイトの開発ソリューション
図4 Webサイトの開発ソリューション

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ヒント2: セッション変数およびストアドプロシージャパラメータの定義

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Kevin S. Goff(Kevin S. Goff)

.NET、Visual FoxPro、SQL Server、Crystal Reportsによる独自のWebソリューション/デスクトップソリューションを提供するコンサルティンググループ「Common Ground Solutions」の創業者兼主任コンサルタント。ソフトウェアアプリケーションの開発経...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1444 2007/07/04 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング