トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
株式会社ヤザワ
矢沢久雄
第2回 データベースオブジェクトがADO .NETに変ったんですよ!
はじめに
ADO.NETの主要なネームスペース
レコードセットではなくデータセットが使われる
.オンメモリ・データベースのサンプル
データアダプタとデータリーダー
データセットの保存と復帰
おわりに

はじめに
.NET Frameworkのクラスライブラリは、ネームスペース(名前空間)と呼ばれる単位で機能ごとにグループ化されています。PASSJ会員の皆さんが最も気になるデータベースアクセス機能は、いくつかのネームスペースによって提供されていて、ADO.NETと総称されます。ADO.NETは、従来のADOに使い方が似ていますが、互換性はありません。今回は、ADO.NETの説明をしましょう。
ADO.NETの主要なネームスペース

ADO.NETの主要なネームスペースを表1に示します。大きく分けて、「SQL Server専用のクラスを提供するネームスペース」、「他のDBMS用のクラスを提供するネームスペース」、および「共通のクラスを提供するネームスペース」の3つに分類されます。.NETでデータベースアクセスを行うには、これらのクラスの使い方を覚えていただくことになります(がんばりましょう!)。クラスの正式名称は、「ネームスペース名.クラス名」で表されます。たとえば、System.DataネームスペースのTableクラスなら、System.Data.Tableが正式名称です。

表1 ADO.NETの主要なネームスペース
用途 ネームスペース 提供するクラス
SQL Server専用 System.Data.SqlClient
System.Data.SqlTypes
SQL Serverマネージプロバイダ用のクラス
SQL Serverのネイティブなデータ型を表すクラス
その他のDBMS用 System.Data.OleDb OLE DBプロバイダ用のクラス
すべてのDBMS用 System.Data
System.Data.Common
データ自体を表すクラス
その他の共通的なクラス

System.Data.SqlClientネームスペースが提供するクラスは、SQL Serverのために最適化されたSQL Serverマネージプロバイダ(.NETネイティブのデータプロバイダ)を使うため、アクセスが高速です。.NETでは、嬉しいことに我らSQL Serverユーザーが有利なのです。その他のDBMSを使う場合は、従来のOLE DBプロバイダを使うことになります(マネージプロバイダと比べて低速です)。ただし、いずれ様々なDBMS用のマネージプロバイダがリリースされることでしょう。

レコードセットではなくデータセットが使われる
.NETでは、現状のSQL Server 2000/7.0やAccess 2000などのDBMSが、そのまま使えます。DBMSとアプリケーションの間に、何らかのデータプロバイダを介在させるというスタイルは、従来どおりです。ただし、(プログラマにはショッキングなことかもしれませんが)アプリケーション側でデータを操作するために使われるのは、レコードセットではありません。データセットと呼ばれる新しいオブジェクトが使われます(図1)。

図1 .NETにおけるデータベースアクセスの仕組み

レコードセットとは何かを一言で説明すれば、「オンメモリ・データベース」ということになるでしょう。データベースには、列、行、テーブル、リレーション、制約などの概念がありますね。それらをアプリケーション側のメモリ上で表したものが、データセットです。従来のADOで使われていたレコードセットは、データソースの一部をメモリ上で表した単一のテーブルに過ぎませんでした。それに対して、データセットは、データソースの詳細な構造をメモリ上で表せるのです。
なぜデータセットを使うという手法が考案されたのでしょう? それは、データソースと切り離された状態でも、アプリケーション側で細かな操作を行えるようにするためです。.NETのコンセプトの1つに「緩やかな結合」という言葉があります。従来のADOのように、一度データソースに接続したらすべての処理が完了するまで接続しっぱなしの「密な結合」は、インターネットを視野に置いた世界ではよろしくないと言うわけです。
ADO.NETでは、データソースに接続してデータセットを取得したら、いったん接続を閉じることができます。この後でデータセットに対して何らかの処理を行ったらなら、再度データソースに接続して、その結果を書き戻せます。ただし、接続しっぱなしで処理することを禁止しているわけではありません。

オンメモリ・データベースのサンプル
図2に示したシンプルな構造の社員名簿データベースを、オンメモリ・データベースで表すサンプルプログラムをお見せしましょう(リスト1)。データソースに接続しないで、メモリ上に2つのテーブル(社員テーブルと部署テーブル)を作成し、その内容をデータグリッド(データを表形式で表示するコントロール)に表示しています。1つのデータセットが2つのテーブルを持ち、個々のテーブルが列と行を持ちます。列には、データ型やヌル値の禁止などの属性を設定できます。テーブル間には、リレーションを設定できます。ここでは、プログラムの細かな部分は気にしないで、緑色で示したコメントを追って、オンメモリでデータベースが作成されて行く雰囲気だけをつかんでください。赤色で示してあるのは、ADO.NETが提供するクラスです。

図2 社員名簿データベース

リスト1 オンメモリ・データベースを作成するプログラム (こちらをクリック)

図3 プログラムの実行結果

皆さんが開発の現場で、リスト1のようなプログラムを作成することはないでしょう。これは、データソースに接続してデータセットを取得した場合でも、このように細かな操作や情報の取得ができることを示すためのサンプルです。これで、データセットのイメージをつかんでいただけたでしょうか?

●データアダプタとデータリーダー
ADO.NETを使って実際のデータソースからデータを取得する方法は、2通りあります。1つは、「データアダプタ」と呼ばれるクラスを使ってレコードセットを取得し、追加、更新、削除などの操作を行うものです。もう1つは、「データリーダー」と呼ばれるクラスを使って、データの取得(前方スクロールのみでリードオンリー)だけを行うものです。それぞれの機能を実現するためのクラスが提供されています。(表2)。
表2 データアダプタとデータリーダーを使うためのクラス
データ取得方法 データプロバイダ クラス名
データアダプタ SQL Serverプロバイダ System.Data.SqlClient.SqlDataAdapter
OLE DBプロバイダ System.Data.OleDb.OleDbDataAdapter
データリーダ SQL Serverプロバイダ System.Data. SqlClient.SqlDataReadet
OLE DBプロバイダ System.Data.OleDb.OleDbDataReader

データアダプタだけ生かしておけば(データアダプタを表すオブジェクトを削除しないでおけば)、データソースとの接続を閉じることができます。再度データソースと接続して、データを書き戻す機能は、データアダプタが提供します。具体的なプログラムは、ADO.NETに関する様々な雑誌や書籍などで何度も目にすると思いますので、ここでは省略させていただきます。

●データセットの保存と復帰
データソースからデータセットを取得し、データソースとの接続を閉じました。ところが、通信回線の故障で再度データソースと接続できなくなってしまいました。さあ、どうしましょう....ご心配はいりません。DataSetクラスのWriteXmlメソッドを使えば、データセットをXML形式でローカルマシンのファイルに保存することができます。DataSetクラスのReadXmlメソッドを使えば、データセットを復元することもできます。リスト1の末尾にリスト2のコードを追加すれば、この機能を確認していただけます。XML形式で保存されたデータセットの内容は、リスト3のようになります。

リスト2 XML形式でデータセットの保存と復帰を行うプログラム(こちらをクリック)

リスト3 XML形式で保存されたデータセット(こちらをクリック)

XML形式でデータセットを保存および復帰する機能は、データセットの一時保存というよりは、インターネット経由でデータセットを他のマシンに転送し、転送先で復元するというような場合に便利でしょう。「世はインターネット時代、インターネットのデータならXML」ですからね。

●おわりに
皆さんは、ADO.NETが提供するクラスを見てどう思われたでしょう。数多くのクラスがあり、さらに従来のレコードセットではなくデータセットが使われるので、「こりゃ大変だぁ!」と思われたかもしれませんね。しかし、冷静に考えてみると、ADO.NETは、皆さんがデータベースに対して持っているテーブルやリレーションなどの概念をそのままクラスで提供しているので、かえってわかりやすくなったと言えます。こりゃ楽しいじゃありませんか!



< 今後の予定 >


第3回 WindowsアプリのことをWindows Formsアプリって言うんですよ!
Windowsアプリケーションの構造と作成方法を説明します。何が変ったかがわかります。
第4回 ASPがASP .NETに変って何でもかんでも楽になっちゃった!
Webアプリケーションの構造と作成方法を説明します。何が変ったかがわかります。
第5回 XML Webサービスは、.NETの目玉商品なんです!
XML Webサービスのコンセプトと、基本的な作成方法を説明します。あなたのアイディアが広がります。
PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.