特集

Visual Studio 2005がやってきた(後編)

VS 2005で変革されたASP.NET、Windowsフォーム、ADO.NETを総覧

山田 祥寛(http://www.wings.msn.to/
2006/01/25

Page1 Page2 Page3

Windowsフォーム 2.0の新機能

 ASP.NET 2.0と並んで忘れてならないのは、Windowsアプリケーション作成のベースとなるWindowsフォームの改善だ。ここでは、主にWindowsフォーム用に追加された新コントロールと、新しいスマート・クライアント(リッチ・クライアント)技術であるClickOnceについて触れておこう。

■新しいWindowsコントロール

 .NET Framework 2.0では、新たに多くのWindowsコントロールが提供されている。以下に主要なものをまとめてみた。

分類 コントロール名 概要
基本 MaskedTextBox あらかじめ決められた書式に従って入力を促すテキストボックス
PropertyGrid プロパティ・ウィンドウのようなUIを提供するコントロール
WebBrowser Webページを表示するためのコントロール
コンテナ FlowLayoutPanel 左→右あるいは上→下の順でコントロールを並べて配置するコンテナ
TableLayoutPanel HTMLのタグ風にコントロールを配置するコンテナ
SplitContainer コンテナの表示領域をサイズ変更可能なパネルに分割する分割バー
メニュー ToolStrip 自由に移動可能なOffice 2003形式のツールバー
MenuStrip Office 2003形式のメニューバー
StatusStrip Office 2003形式のステータスバー
データ DataGridView DataGridコントロールの進化版
BindingSource データベースへの接続や編集状態を管理
BindingNavigator カレント・レコードを移動するためのUIを提供
コンポーネント BackgroundWorker マルチスレッド処理を管理するコンポーネント
SerialPort シリアルポートによる通信を制御するコンポーネント
.NET Framework 2.0で追加された主なWindowsコントロール
これらのコントロールは、VS 2005のツールボックスからフォームにドラッグ&ドロップして利用できる。

 この中でも特に注目すべきコントロールは、やはりDataGridViewコントロールだろう。

ドラッグ&ドロップ一発でDB連携アプリを完全構築!

 DataGridViewコントロールは、従来のDataGridコントロールの進化版ともいうべきコントロールで、グリッド内の各列の内容を(単なるテキストとしてだけではなく)コンボボックスやチェック・ボックス、画像、リンクなどで表現することが容易にできるようになった。

 同じく今回で追加されたBindingSourceやBindingNavigatorコントロールと連携することで、データベース連携の機能もごくわずかなコードで実現できる。

.NET 2.0で新登場するWindowsコントロール

 アプリケーションを構築するうえでユーザー・インターフェイス(以下UI)の重要性はいうまでもないが、Office 2003スタイルのUIを提供するToolStrip、MenuStrip、StatusStripコントロールにも注目だ。これらコントロールを利用することで、ユーザーが使い慣れたOffice 2003チックな見栄えのWindowsアプリケーションも簡単に実装できる。

 たかがUIといってしまえばそれまでかもしれないが、エンドユーザーにとっては日常使い慣れたOffice 2003と同様の感覚でアプリケーションを操作できるのはうれしいところだろう。

■強化版ノータッチ・デプロイメント「ClickOnce」

 なるほど、ASP.NET 2.0は大きく進化した。運用や展開といった局面におけるASP.NET(Webアプリケーション)の有効性についても疑うべくもない。

 しかし、いかにASP.NETが進化しようと、Webというプラットフォームを前提としているが故の限界があるのも確かだ。例えば、ユーザビリティを大きく左右するUIや操作性といった点において、Webアプリケーションは旧来のWindowsアプリケーションに遠く及ばない。特に入力項目が多い業務アプリケーションなどでは、クライアント/サーバ型アプリケーションからWebアプリケーションに移行することで、かえって業務生産性が低下してしまうというケースもあるだろう。

 そこで登場したのが、.NET Framework 2.0の「ClickOnce」だ。ClickOnceとは、一言でいうならば、ブラウザ上から直接にWindowsアプリケーションを起動できる機能のこと。ClickOnceを利用することで、Windowsアプリケーションのリッチなインターフェイスはそのままに、Webへ移行できるというわけだ。

ClickOnceアプリケーションのダウンロード・ページ例
ダウンロード・ページはVS 2005で自動生成できる。ダウンロード・ページ上のリンクをクリックすると、インストールのための確認ダイアログが表示された後、ClickOnceアプリケーションのインストールが開始される。

ClickOnceの真実
.NETアプリケーション自動更新技術の比較
ASP.NET 2.0が変えるWebアプリ開発の世界

 ClickOnceに相当する機能は、.NET Framework 1.xでも「ノータッチ・デプロイメント」という名前で提供されていたが、ClickOnceでは「オフライン実行」「Windowsシェルへの統合」「必要モジュールの自動セットアップ」「更新ロールバック機能」など、さまざまな点で機能強化が図られている。

 Webアプリケーションを構築する場合、ASP.NET 2.0で何から何まで作り込むという選択肢ももちろんあるが、Webページの操作性に不満を感じたら、ClickOnceのようなリッチ・クライアントに目を向けてみるのもよいのではないだろうか。

ADO.NET 2.0の新機能

ADO.NET基礎講座

 本特集の最後となるテーマはADO.NETだ。ADO.NETは、.NET Frameworkにおいてデータベースにアクセスするための標準的なインターフェイスである。ADO.NETもまた、.NET Framework 2.0のバージョン・アップとともに、多くの機能改善が行われている。

■DataTableクラスの改善

 DataTableクラスは、ADO.NETの非接続モデルにおいて、インメモリ内のデータベースのテーブルを表すクラスだ。ADO.NET 1.0でもDataSetクラスと合わせて(あるいはそれ以上に)利用機会の多いクラスであったが、ADO.NET 2.0で機能が大幅に改善されたことで、より便利に使いやすくなっている。

 まず、DataTableクラスにWriteXmlやReadXmlなど、従来はDataSetクラスにしか用意されていなかったメソッドが追加された。これによって、DataTableオブジェクトの内容を単体でもシリアライズできるため、テーブルの内容をシリアライズするためだけに配下に1つしかDataTableオブジェクトを持たないDataSetオブジェクトを作成する必要がなくなった。

 また、DataReaderオブジェクトやDataViewオブジェクトなどと連携できるようになった点も注目だ。例えば、DataReaderで読み込んだデータをDataTableに読み込んだり、DataViewでソートやフィルタ処理を行った結果をDataTableに流し込んだりといった作業が直接的に行えるようになる。

 さらに、ADO.NET 2.0で追加されたDataTableReaderオブジェクトを利用することで、DataTableの内容を順次読み込むDataReaderを取得することも可能になった。以下に、DataReaderとDataTableとを相互変換するためのコード例を示してみよう。

Dim reader As DbDataReader = comm.ExecuteReader()
Dim table As DataTable = New DataTable("books")

' DataReaderの内容をDataTableから読み込む
table.Load(reader)

' DataTableからDataReaderを生成
Dim tReader As DataTableReader = table.CreateDataReader()

Do While tReader.Read()
  Response.Write(tReader.GetString(0))
Loop
DataReaderとDataTableとの相互変換(VB)
DataTableReaderオブジェクトによりDataTableの内容を順次読み込むDataReaderを取得することができる。

■接続文字列は構成ファイルに

 従来、ADO.NET 1.0ではアプリケーション内で使用するデータベース接続文字列を管理する標準的な手段が提供されていなかった。もちろん、環境によって変動する可能性のある接続文字列を、個々のコードにハード・コーディングすることは好ましくないので、一般的には、構成ファイルの<appSettings>要素で管理していたはずだ。

 しかし、ADO.NET 2.0では専用の要素として<connectionStrings>要素が追加された。VS 2005でデータアクセス・コントロールなどからデータベースへの接続を設定した場合には、<connectionStrings>要素が自動的に生成されることになる。

 以下に<connectionStrings>要素の記述例を示しておく。name属性は接続文字列を一意に識別する名前、connectionString属性は接続文字列、そして、providerName属性は使用するデータ・プロバイダ名を表す。

<connectionStrings>
  <add name="db" connectionString="Data Source=(local);User ID=sa;Password=sa;Persist Security Info=True;Initial Catalog=master" providerName="System.Data.SqlClient"/>
</connectionStrings>
構成ファイル上で接続文字列を記述する例
接続文字列専用の要素として<connectionStrings>要素が追加された。

■データ・プロバイダに依存しないコードの作成

 従来のADO.NETでは、使用するデータ・プロバイダによってSystem.Data.SqlClient(SQLServer用)名前空間、System.Data.OracleClient(Oracle用)名前空間、System.Data.OleDb(OLE DBプロバイダ用)名前空間などを、それぞれ使い分ける必要があった。しかし、これではコードが個別のデータ・プロバイダに依存してしまい、バックエンドのデータベース・サーバを(例えば)OracleからSQL Serverに乗り換えた場合などに、既存のコードに対するインパクトも甚大となってしまう。

 そこでADO.NET 2.0では、データ・プロバイダに依存しない汎用クラスが追加されている。具体的には、System.Data.Common名前空間に追加されたDbConnection、DbCommand、DbDataReader、DbParameterなどのクラスである。これらの汎用クラスは、DbProviderFactoryクラスのCreateXxxxxxメソッドを介して取得することができる。

 以下に、データベースに接続し、データを取得する基本的なコード例を示しておこう。なお、構成ファイルにはあらかじめ前項で示した<connectionStrings>要素が設定されているものとする。

' 構成ファイルからデータベース接続情報を取得
Dim setting As ConnectionStringSettings = _
    ConfigurationManager.ConnectionStrings("db")

' DbProviderFactoryクラスを介してDbConnectionオブジェクト(接続)を取得
Dim factory As DbProviderFactory = _
    DbProviderFactories.GetFactory(setting.ProviderName)

Using db As DbConnection = factory.CreateConnection()
  db.ConnectionString = setting.ConnectionString
  db.Open()

  ' DbProviderFactoryクラスを介してDbCommandオブジェクトを取得
  Dim comm As DbCommand = factory.CreateCommand()
  comm.CommandText = "SELECT * FROM books"
  comm.Connection = db

  Dim reader As DbDataReader = comm.ExecuteReader()
  Do While reader.Read()
    Response.Write(reader.GetString(0) & "<br>")
  Loop
End Using
DbProviderFactoryクラスを利用したデータベース接続
ADO.NET 2.0では、データベース・サーバの種類によらないデータベース・アクセスのためのコードが記述可能となっている。

 もちろん、実際にはデータベース・サーバはそれぞれ固有のSQL構文や機能を提供しており、完全にデータベースを意識しないコードを記述することは難しい。しかし、そのような場合にも、汎用クラスを利用していれば、データ・プロバイダを変更した場合のインパクトを最小限に抑えることができる。

■MARS(SQL Server 2005のみ)

 MARS(Multiple Active Result Sets)は、その名のとおり、単一の接続上で複数のカーソルレス結果セットを操作する機能である。

 従来、ADO.NET 1.0では、結果セットが開かれた状態で新たな結果セットを開くことはできなかったが、ある結果セットで取得した値を基に、入れ子で新たなクエリを実行しようとした場合には、これは甚だ不便な仕様であったはずだ。しかし、ADO.NET 2.0+SQL Server 2005を利用することで、1つの接続上で複数のクエリを実行できるようになっている。

 MARSは、SQL Server 2005環境における代表的な変更点であるが*、そのほかにもSQL Server 2005固有の機能として、以下のような機能が追加されている。

* ただし、現在OTN.NETで公開されているODP.NETを利用することで、Oracle環境でもMARS機能を利用することが可能だ。
  • SqlBulkCopyクラスによるデータ一括挿入の高速化
  • Maxデータ型、XMLデータ型、ユーザー定義型などSQL Server独自型への対応
  • BeginExecureXxxxx、EndExecuteXxxxxメソッドによるコマンドの非同期実行
  • クエリ通知への対応(SqlNotificationRequest/SqlDependencyクラス)

 以上、本特集では3回にわたって、VS 2005(とそのベースとなる.NET Framework 2.0)の新機能について概説してきた。もちろん、本稿で紹介したのは、あくまでそれぞれの機能のさわりにすぎないし、取り上げた項目も全体からすればごく一部にすぎない。より詳細な機能については、今後公開予定の諸記事を参考にしていただきたい。

 本稿が、読者諸兄がまずVS 2005へ足を向ける1つのきっかけとなれば幸いである。End of Article

 

 INDEX
  [特集]Visual Studio 2005がやってきた(前編)
  さらに進化した統合開発環境の主要な新機能を総括
    1.VS 2005で作成可能なアプリケーションの種類
    2.統合開発環境としての新機能(1)
    3.統合開発環境としての新機能(2)
   
  [特集]Visual Studio 2005がやってきた(中編)
  VS 2005で新しくなったVisual BasicとC#の新機能を総括
    1.VS 2005で使用可能な言語/部分クラス/ジェネリック
    2.Nullable型/プロパティのアクセシビリティ/My機能/Usingステートメント/既定インスタンス
    3.反復子(イテレータ)/匿名メソッド/静的クラス
   
  [特集]Visual Studio 2005がやってきた(後編)
  VS 2005で変革されたASP.NET、Windowsフォーム、ADO.NETを総覧
    1. .NET Framework 2.0の新機能
    2. ASP.NET 2.0の新機能
  3. Windowsフォーム 2.0の新機能&ADO.NET 2.0の新機能
 


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

本日 月間