microsoft access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfaccess とvisual basic...

41
Microsoft ® Access Microsoft ® Visual Basic ® .NET データアクセス テクノロジーの比較

Upload: others

Post on 08-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Microsoft® Access と

Microsoft® Visual Basic® .NET の

データアクセス テクノロジーの比較

Page 2: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

このテキストの中で使用しているアイコンの意味は以下のとおりです。 (OnePoint) 補足情報 (実習) 実習タイトル

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む) は、将来

予告なしに変更することがあります。別途記載されていない場合、このソフトウェアおよび関連するドキュメントで

使用している会社、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、出来事などの名称は架空

のものです。実在する名称とは一切関係ありません。お客様ご自身の責任において、適用されるすべての著作権関連

法規に従ったご使用を願います。

マイクロソフトは、このドキュメントに記載されている内容に関し、特許、特許申請、商標、著作権、またはその他

の無体財産権を有する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のない限り、このドキ

ュメントはこれらの特許、商標、著作権、またはその他の無体財産権に関する権利をお客様に許諾するものではあり

ません。

Copyright c 2005 Microsoft Corporation. All rights reserved.

Microsoft、Windows、Visual Basic、および Visual Studio は、米国 Microsoft Corporation の米国およびその他の国に

おける登録商標または商標です。

記載されている会社名、製品名には、各社の商標のものもあります。

Page 3: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

はじめに

このホワイトペーパーでは、Microsoft® Access(以下、Access と表記します)によるアプリケーシ

ョン開発に携わっている方々を対象に、Microsoft® Visual Basic® .NET(以下、Visual Basic .NET と

表記します)によるプログラミングを、より早く理解していただくことを目的としています。

以下のとおり、ホワイトペーパーは全部で3部構成になっており、このうちの第2部が本ドキュ

メントとなります。

第1部 「Microsoft Access 開発者のための Microsoft Visual Basic .NET 入門」

Visual Basic .NET の概要や Access と比較して、どのような機能を備えているのかを

簡単に説明します。

第2部 「Microsoft Access と Microsoft Visual Basic .NET の

データアクセス テクノロジーの比較」

Visual Basic .NET のデータアクセス技術について、Access と比較しながら詳細に説

明します。

第3部 「Microsoft Visual Basic .NET による Windows アプリケーションの作成」

Visual Basic .NET で Windows のアプリケーションのサンプルを作成し、開発手法を

具体的に説明します。

Page 4: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

目次

第 1 章 Visual Basic .NET で使用する データアクセス ライブラリ ...........................................1 1.1 ADO.NET とは? .................................................................................................................2 1.2 ADO.NET の特長 .................................................................................................................9

第 2 章 データアクセス プログラミングの比較 ..........................................................................14 2.1 オブジェクトモデルの比較 .................................................................................................15 2.2 プログラミングによるデータアクセスの方法.....................................................................18

第 3 章 Visual Basic .NET から ADO .NET を 使用したデータアクセス例 ..............................23 3.1 データアクセス アプリケーションの作成方法...................................................................24

Page 5: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 1

第1章 Visual Basic .NET で使用する データアクセス ライブラリ

◆第1章で理解できること

本章では、Visual Basic .NET のデータアクセス ライブラリについて説明し、Access と、どのよう

な違いがあるのかを探っていきます。

Page 6: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 2

1.1 ADO.NET とは?

Access では、データアクセス ライブラリとして、Data Access Objects(以下、DAO と表記します)

または ActiveX Data Object(以下、ADO と表記します)を使用します。

これに対して、Visual Basic .NET では、ADO.NET という、より新しいデータアクセス ライブラリ

を使用します。

ここでは、まず、Access から使用する DAO および ADO の概要にふれた上で、Visual Basic .NETで使用する ADO.NET がどのように進化したデータアクセス ライブラリであるのかを見ていきま

す。

DAO の概要

DAO は、JET データベースエンジンを操作するためのインタフェースを提供するコンポーネント

で、Access データベース(.mdb)へのアクセスに適しています。

DAO は、Access データベースだけでなく、JET データベースエンジンを介して、Open Data Base Connectivity ドライバ(以下、ODBC ドライバと表記します)を使用し、外部のデータベースに接

続することも可能です。

ODBC ドライバは、種類の異なるデータベースにアクセスするための共通のインタフェースを提供するコンポーネントです。

Access 2000 よりも以前のバージョンでは、DAO がデフォルトのデータアクセス ライブラリでし

た。Access 2000 よりも以前のバージョンでも、ADO を使用することができますが、この場合は、

別途にコンポーネントの追加と設定が必要となります。

Access は、DAO から JET データベースエンジンを使用して、Access データベースを操作します。

また、JET データベースエンジンから ODBC ドライバへアクセスし、Microsoft® SQL Server™(以

下、SQL Server と表記します)や Oracle®(以下、Oracle と表記します)などの外部データベース

を操作することができます。

図 1 Access から DAO を使用したシステム形態

Page 7: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 3

ADO の概要

ADO は、Object Linking and Embedding Data Base プロバイダ(以下、OLE DB と表記します)を操

作するためのインタフェースを提供するコンポーネントです。

ADO に操作される OLE DB プロバイダは種類の異なるデータソースにアクセスするための共通のインタフェースを提供するコンポーネントです。

Access 2000 以降は、ADO がデフォルトのデータアクセス ライブラリに含まれています。DAO を

使用することもできますが、DAO は Access データベース向に最適化されたライブラリなので、外

部データベースへアクセスする場合は、ADO の使用が推奨されています。

Access は、この ADO から OLE DB プロバイダを通して、Access データベースのほか、SQL Serverや Oracle などの外部データベースおよび XML データを操作します。

図 2 Access から ADO を使用したシステム形態

Page 8: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 4

ADO.NET の概要

.NET Framework は、Microsoft が提唱する.NET 構想において、XML Web サービスや、その他のア

プリケーションの開発および実行を支援するためのランタイム環境です。

.NET Framework は、次のような要素で構成されています。

図 3 .NET Framework の構成

表 1 .NET Framework を構成するライブラリ

ライブラリ 概要

Web サービス Windows アプリケーションを開発するためのライブリです。

ユーザインタフェース Web アプリケーションを開発するためのライブラリです。

ADO.NET データアクセスのためのライブラリです。

ベースクラスライブラリ 共通言語ランタイムにアクセスするためのインタフェースを提供

するライブラリです。

共通言語ランタイム .NET アプリケーションの実行エンジンです。

ADO.NET は、この.NET Framework 上でデータをやり取りする際に利用されるテクノロジーです。

SQL Server などのデータストアとスムーズにデータ交換を行うことができます。また、XML との

親和性が非常に高く、HTTP などの通信プロトコルを利用したデータアクセスも行えます。

Visual Basic .NET では、ADO.NET がデフォルトのデータアクセス ライブラリです。ADO や DAOを使用することもできますが、各々の専用のコンポーネントの使用により、オーバーヘッドが生

じるので、ADO.NET を使用した方がより効率的なデータアクセスが実現できます。

Visual Basic .NET は、この ADO.NET を使用して、Access データベースや SQL Server、および Oracleなどのデータベースを操作します。また、XML データの入出力を行うことができます。

Page 9: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 5

図 4 Visual Studio .NET から ADO.NET を使用したシステム形態

.NET Framework と ADO.NET の概要について

.NET Framework および ADO..NET の概要の詳しい情報については、次のサイトを参照して下さい。

●.NET Framework Web サイト

http://www.microsoft.com/japan/msdn/netframework/default.aspx

●ADO.NET の概要

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconoverviewofadonet.asp

Page 10: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 6

ADO.NET のアーキテクチャ

ADO.NET は、.NET Framework データプロバイダとデータセットという 2 つのコンポーネントに

分かれて構成されています。

図 5 ADO.NET の構成

.NET Framework データプロバイダ

.NET Framework データプロバイダは、データソースへの接続、コマンドの実行や結果の読み取り

に使用されます。

NET Framework データプロバイダは、特定のデータソースに最適化されており、現在は、表2の

ような標準プロバイダを提供しています。

開発者はアプリケーションの目的に応じて、任意のデータソースへのアクセスに適したプロバイ

ダを使用します。

表 2 NET Framework データプロバイダの種類

プロバイダ 概要

.NET Framework Data Provider for SQL Server

SQL Server 7.0 以降に対応したプロバイダです。

他のコンポーネントを経由せずに直接 SQL

Server にアクセスするので、パフォーマンスが

高くなります。

.NET Framework Data Provider for OLE DB

OLE DB を経由するプロバイダです。

従来の OLE DB データソースへのアクセスに対

応しています。

.NET Framework Data Provider for ODBC

ODBC を経由するプロバイダです。

従来の ODBC データソースへのアクセスに対応

しています。

.NET Framework Data Provider for Oracle Oracle データソースへのアクセスに対応したプ

ロバイダです。

また、各々のデータプロバイダが、表3のようなオブジェクトで構成されています。

Page 11: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 7

表 3 .NET Framework データプロバイダを構成するオブジェクト

オブジェクト 概要

コネクション データソースへの接続を確立します。

コマンド データソースに対して、データの取得、更新、削除などの

コマンドを実行します。

データリーダ データソースから、前方専用、読み取り専用でデータを読み取り

ます。

データアダプタ データセットにデータソースのデータを読み込んだり、データセ

ットの変更内容をデータソースへ反映したりします。

データセット

データセットは、データソースのコピーを保持するオブジェクトそのもので、読み取った結果を

保持します。

データセットは、すべてのデータソースから独立しているため、複数の異なるデータソースから

データを設定することができます。また、XML データを読み取ったり、保持しているデータを

XML データとして出力したりすることができます。

データセットは、次のようなオブジェクトで構成されており、DataTables コレクションおよび

DataRelation コレクションにて複数のテーブルとリレーションが格納できるようになっています。

図 6 データセットのオブジェクト構成

Page 12: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 8

ADO.NET のアーキテクチャについて

ADO.NET のアーキテクチャの詳しい情報については、次のサイトを参照してください。

●ADO.NET のアーキテクチャ

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconadonetarchitecture.asp

●.NET Framework プロバイダ

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconadonetproviders.asp

●ADO.NET DataSet

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpcontheadonetdataset.asp

Page 13: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 9

1.2 ADO.NET の特長

Visual Basic .NET から使用する ADO.NET には、Access から使用する DAO や ADO と比較してい

くつかの利点があります。

ここでは、次のような観点に絞って各々を比較し、どのような違いがあるのか、また、ADO.NETを利用することで、どういったメリットがあるのかを探っていきます。

パフォーマンス

スケーラビリティ

相互運用性

パフォーマンス

Access から DAO や ADO を使用したデータアクセス アプリケーションは、データベースに常時

接続したまま、データを操作する、接続型データアクセスを実行します。接続型データアクセス

では、複数のクライアントからのデータアクセスで、システムの負荷が大きくなる場合がありま

す。

とくに、DAO から ODBC 接続でデータアクセスする場合は、多くのコンポーネントを使用するた

め、クライアント側にも大きくオーバーヘッドが生じます。

図 7 Access からの DAO や ADO を使用したデータアクセス

Page 14: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 10

対照的に Visual Basic .NET から ADO.NET を使用したデータアクセス アプリケーションは、デー

タベースに常時接続し続けることなくデータを操作する、非接続型データアクセスを実行するこ

とができます。

ADO.NET の非接続型データアクセスでは、メモリ上にデータがコピーされた後、データベースと

の接続を解除して、このコピーに対してデータを操作することができます。そして、更新された

データをデータソースに反映する場合は、データソースとの接続が一時的に復元される仕組みと

なっています。

これにより、システムの負荷の大きな原因となる長時間接続がなくなるため、システム全体のパ

フォーマンスを向上させることができます。

また、ADO.NET では、接続型データアクセスもサポートしているので、たとえば、他のクライア

ントとデータを更新する際の競合を避けたい場合、参照系の処理は非接続型データアクセスで、

更新系の処理は接続型データアクセスで実行するアプリケーションを作成することができます。

このように、非接続型データアクセスと接続型データアクセスを組み合わせて、Access のデータ

アクセス アプリケーションよりも、システムの負荷をおさえたアプリケーションの作成すること

ができます。

図 8 Visual Basic .NET から ADO.NET を使用したデータアクセス

Page 15: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 11

スケーラビリティ

Access から DAO や ADO を使用してデータアクセス アプリケーションを作成した場合、クライ

アント側でプレゼンテーション層(GUI)と機能層(データアクセス処理)が一体化して、サーバ

ー側データ層(データベース)とデータをやりとりする2階層アプリケーションとなります。

図 9 Access で作成できる2階層アプリケーション

一方、Visual Basic .NET から ADO.NET を使用する場合、プレゼンテーション層と機能層とデータ

層に分けた3階層のデータアクセス アプリケーションが作成できます。Access の2階層アプリケ

ーションで言う、クライアント側のプレゼンテーション層と一体化した機能層をサーバー側の独

立した層に配置することができるのです。

これにより、データアクセス処理をサーバー側で実行できるため、クライアント側のシステムリ

ソースの不足を軽減して、快適なパフォーマンスのデータアクセスが実現できます。

また、機能層を複数のアプリケーションで共用することができます。この場合、データのレイア

ウトなどを変更したときにデータアクセス処理部分については、機能層のプログラムを変更する

だけで対応できます。このため、アプリケーションの保守や運用管理が容易になります。

データアクセスを含むシステムは、アクセスするデータに対する要求の増加などに伴って、ハー

ドウェア環境やソフトウェア環境を成長させていきます。ADO.NET では3階層アプリケーション

により、この成長に対応していくためのスケーラビリティを提供します。

図 10 Visual Basic .NET で作成できる3階層アプリケーション

Page 16: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 12

相互運用性

Access から DAO や ADO を使用して作成したデータアクセス アプリケーションは、アプリケー

ション間でデータを相互運用する場合、送り側も受け取り側も、DAO や ADO を使用したデータ

アクセス コンポーネントを実装している必要があります。

たとえば、DAO を使用して作成したデータアクセス アプリケーションに対して XML データを転

送する場合は、XML 形式から DAO のレコードセットとして読み取り可能なオブジェクトに変更

してから、データを転送します。

図 11 Access では DAO や ADO コンポーネントで利用可能な形式で

データを送受信する

対照的に Visual Basic .NET から使用する ADO.NET では、データの転送に XML 形式を採用してい

ます。このため、XML を使用できる環境であれば、ADO.NET コンポーネントでなくてもデータ

を受信して活用することができます。

XML は、国際標準の規格であり、プラットフォームに依存しません。また、Windows アプリケー

ションでも、Web アプリケーションでも使用することができます。

つまり、ADO.NET を使用すれば、ネットワーク上のさまざまなプラットフォームのさまざまな種

類のデータにアクセスできる柔軟なアプリケーションが作成できます。

Page 17: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 13

図 12 Visual Studio .NET では XML 形式でデータを送受信できる

Page 18: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 14

第2章 データアクセス プログラミングの比較

◆第2章で理解できること

本章では、Access と Visual Studio .NET のプログラミング方法の違いについて説明します。

まずは、データアクセス ライブラリのオブジェクトモデルにふれた上で、クライアント アプリ

ケーションからのデータアクセス方法を見ていきます。

Page 19: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 15

2.1 オブジェクトモデルの比較

ここでは、DAO、ADO、ADO.NET の各データアクセス ライブラリのオブジェクトモデルを比較

します。

DAO のオブジェクトモデル

DAO は、トップレベルの DBEngine オブジェクト以下のオブジェクトを使用してデータベースに

アクセスする階層的な構造となっています。主に Jet データベースエンジンへアクセスするための

オブジェクトですが、外部のデータベースに接続することも可能です。外部のデータベースに接

続する場合は、ODBC を使用します。

図 13 DAO のオブジェクトモデル

Page 20: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 16

ADO のオブジェクトモデル

ADO のオブジェクトモデルは、DAO に比べるとシンプルな構造となっています。データソースか

らデータを取得する際に必ずしも Connection オブジェクトを使用する必要がないことから階層的

でなくフラットな構造となっています。

図 14 ADO のオブジェクトモデル

Page 21: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 17

ADO.NET のオブジェクトモデル

ADO.NET のオブジェクトモデルは、ADO と似ている部分もありますが基本的には異なります。

ADO.NET は、大きく分けると.NET Framework データ プロバイダと DataSet オブジェクトに分け

られます。.NET Framework データ プロバイダは、特定のデータソースに最適化されたもので SQL Server データ プロバイダ、OLE DB データ プロバイダ、ODBC データ プロバイダなどが標準

的にサポートされています。また、ADO.NET の大きな特徴の一つとして完全な非接続型アクセス

が挙げられます。データベースのローカルコピーである DataSet オブジェクトを使用することでシ

ステム負荷が軽減されシステム全体のスケーラビリティも向上します。更に、ADO.NET では、

XML ストリームまたは XML ドキュメントから DataSet へデータを格納でき、XML ストリーム

または XML ドキュメントから提供される情報を DataSet の既存のデータと組み合わせること

もできます。このように非接続型アクセスの DataSet オブジェクトを使用することでデータソース

に依存することないプログラミングが可能となります。

図 15 ADO.NET のオブジェクトモデル

Page 22: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 18

2.2 プログラミングによるデータアクセスの方法

ここでは、Access で DAO 及び ADO を使用したサンプルコードを記述し、これと同じような処理

を Visual Basic .NET で記述したサンプルコードとの比較を行います。

Access、Visual Basic .NET ともに SQL Server に接続することを前提として以下の処理の流れを比較

します。

データベース接続

データ取得

データ更新

データベース切断

Access からの DAO でのデータアクセス例

Access から DAO を使用した基本的なデータアクセス処理のサンプルコードは、次のようになりま

す。

リスト 1 Access から DAO を使用したサンプルコード

Sub sampleDAO() Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset 'データベース接続 Set ws = CreateWorkspace("NewWorkspace", "sa", "sa", dbUseODBC) Set db = ws.OpenDatabase("db", False, False, _ "ODBC;DATABASE=SampleDB;DSN=SampleDB") 'データ取得(全データ) Set rs = db.OpenRecordset("SELECT * FROM M_STAFF", _ dbOpenDynaset, dbExecDriect, dbOptimisticValue) Do Until rs.EOF Debug.Print rs.Fields("StaffID").Value & "," & _ rs.Fields("StaffName").Value & "," & _ rs.Fields("Remarks").Value rs.MoveNext Loop 'データ更新(先頭行) rs.MoveFirst rs.Edit rs.Fields("Remarks").Value = "更新済" rs.Update Debug.Print rs.Fields("StaffID").Value & "," & _ rs.Fields("StaffName").Value & "," & _ rs.Fields("Remarks").Value rs.Close 'データベース切断 db.Close

Page 23: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 19

Access からの ADO でのデータアクセス例

Access から ADO を使用した基本的なデータアクセス処理のサンプルコードは、次のようになりま

す。

リスト 2 Access から ADO を使用したサンプルコード

Sub sampleADO() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset 'データベース接続 With cn .ConnectionString = _ "PROVIDER=SQLOLEDB;" & _ "DATA SOURCE=WINSV;DATABASE=SampleDB;UID=sa;PWD=sa;" .Open End With 'データ取得(全データ) rs.Open "SELECT * FROM M_STAFF", _ cn, adOpenDynamic, adLockOptimistic Do Until rs.EOF Debug.Print rs.Fields("StaffID").Value & "," & _ rs.Fields("StaffName").Value & "," & _ rs.Fields("Remarks").Value rs.MoveNext Loop 'データ更新(先頭行) rs.MoveFirst rs.Fields("Remarks").Value = "更新済" rs.Update Debug.Print rs.Fields("StaffID").Value & "," & _ rs.Fields("StaffName").Value & "," & _ rs.Fields("Remarks").Value rs.Close 'データベース切断 cn.Close

Page 24: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 20

Visual Basic .NET からのデータアクセス例

Access のプロクラミング例に対応した Visual Basic .NET のサンプルコードは、次のようになりま

す。

リスト 3 Visual Basic .NET から ADO.NET を使用したサンプルコード

データベース接続

DAO では、Database オブジェクトでデータベースに接続します。SQL Server(外部データベース)への接続には、ODBC を使用します。

ADO では、Connection オブジェクトでデータベースに接続します。SQL Server への接続には、

Microsoft OLE DB Provider for SQL Server(SQLOLEDB)を使用します。

ADO.NET では、SqlConnection オブジェクトでデータベースに接続します。SQL Server への接続

には、.NET Framework Data Provider for SQL Server を使用します。これは、独自のプロトコルで

OLE DB、ODBC を使用することなく直接 SQL Server へ接続するように設計されているので軽量で

高速に動作します。

また、接続文字列は、ADO と ADO.NET で同じようなフォーマットをサポートします。しかし、

DAO では、ODBC を使用するためフォーマットが他と異なります。

Private Sub sampleVB() Dim cn As New SqlConnection Dim ds As New DataSet Dim dr As DataRow 'データベース接続 With cn .ConnectionString = _ "data source=WINSV;" & _ "initial catalog=SampleDB;user id=sa;password=sa" .Open() End With 'データ取得(全データ) Dim da As New SqlDataAdapter("SELECT * FROM M_STAFF", cn) da.Fill(ds, "M_STAFF") For Each dr In ds.Tables("M_STAFF").Rows Console.WriteLine(dr("StaffID") & "," & _ dr("StaffName") & "," & _ dr("Remarks")) Next 'データ更新(先頭行) Dim cb As New SqlCommandBuilder(da) dr = ds.Tables("M_STAFF").Rows(0) dr.BeginEdit() dr("Remarks") = "更新済" dr.EndEdit() Console.WriteLine(dr("StaffID") & "," & _ dr("StaffName") & "," & _ dr("Remarks")) da.Update(ds, "M_STAFF") ds = Nothing 'データベース切断 cn.Close()

Page 25: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 21

データ取得

DAO では、Recordset オブジェクトを使用してデータを取得します。データアクセスには、MoveNextメソッドを使用して各行をシーケンシャルにスキャンします。

ADO でも、Recordset オブジェクトを使用してデータを取得します。DAO と比べると Recordset オブジェクトの作成方法が若干異なりますが、両者ともほぼ同じ機能を持っています。また、DAOと同じく MoveNext メソッドを使用して各行をシーケンシャルにスキャンします。

ADO.NET では、SqlDataAdapter オブジェクトと DataSet オブジェクトを使用してデータを取得し

ます。SqlDataAdapter オブジェクトは、DataSet オブジェクトと SQL Server 間のブリッジの役割を

果たします。実際のデータは、SqlDataAdapter オブジェクトの Fill メソッドにより DataSet オブジ

ェクトに格納されます。このように、DataSet オブジェクト自体には、データソースの情報が保持

されないため、データソースに依存することのない処理が可能となります。また、DataSet オブジ

ェクトでは、各行がコレクションとなるため「For Each...Next ステートメント」を使用してテーブ

ル内をループできます。更に、序数インデックスまたは主キーインデックスで特定行にアクセス

することも可能です。

データ更新

DAO では、Recordset オブジェクトの Edit メソッドで一度編集モードにしてから Update メソッド

で更新します。

ADO でも、Recordset オブジェクトの Update メソッドで更新しますが、DAO のように明示的に編

集モードを指定する必要がありません。

ADO.NET では、非接続型アクセスのためデータ編集は、DataSet オブジェクトの BeginEdit メソッ

ド(編集開始)、EndEdit(編集終了)で行い、実際のデータ更新は、SQL Server とのブリッジの役割を

果たす SqlDataAdapter オブジェクトの Update メソッドを使用します。SqlDataAdapter オブジェク

トでは、データの読み込みと更新を効率的に行うために、データベースの更新に使用される、一

連のデータ コマンド(SelectCommand 、InsertCommand 、DeleteCommand 、UpdateCommand 、TableMappings) の各プロパティが用意されています。この各プロパティに SQL ステートメント

を設定することにより柔軟で効率的なデータ更新を行うことができます。また、単一テーブルを

更新する場合は、SqlCommandBuilder オブジェクトを使用して自動で SQL ステートメントを生成

することもできます。

データベース切断

DAO では、Database オブジェクトの Close メソッドでデータベースへの接続を閉じます。

ADO では、Connection オブジェクトの Close メソッドでデータベースへの接続を閉じます。

ADO.NET では、SqlConnection オブジェクトの Close メソッドでデータベースへの接続を閉じます。

Page 26: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 22

データアクセス方法の比較表

上記、サンプルコードでのデータアクセス方法を比較すると以下のようになります。

表 4 データアクセス方法の比較

処理 DAO ADO ADO.NET

Database Connection SqlConnection デ ー タ

ベース

接続 ODBC データプロバイダを

使用して SQL Server に接続

する

SQL Server 用の

OLE DB データプロバイダで

接続する

SQL Server 専用の

.NET Framework データ プ

ロバイダで接続する

Recordset Recordset SqlDataAdapter

DataSet

デ ー タ

取得

MoveNext メソッドを使用し

てシーケンシャルにアクセ

スする

MoveNext メソッドを使用し

てシーケンシャルにアクセ

スする

コレクションのループ及び

序数インデックスまたは主

キー インデックスで特定行

にアクセスする

Recordset Recordset SqlDataAdapter

DataSet

デ ー タ

更新

Edit メソッドで編集モードに

設定後、Update メソッドで更

新する

直接編集後、Update メソッド

で更新する

DataSet で編集後に

SqlDataAdapter で更新する

Database Connection SqlConnection デ ー タ

ベース

切断 Close メソッドで切断する Close メソッドで切断する Close メソッドで切断する

ADO.NET のプログラミングについて

ADO.NET のプログラミングの詳しい情報については、次のサイトを参照してください。

● ADO.NET データソースへの接続

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vboriadonetconnections.asp

● ADO.NET DataSet 作成

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconcreatingusingdatasets.asp

Page 27: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 23

第3章 Visual Basic .NET から ADO .NET を 使用したデータアクセス例

◆第3章で理解できること

本章では、Visual Basic .NET から ADO.NET を使用した簡単なデータアクセス アプリケーション

の作成方法を説明します。

Page 28: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 24

3.1 データアクセス アプリケーションの作成方法

Visual Basic .NET には、ADO .NET のためのコードジェネレート機能が備わっており、それを用い

ることで ADO .NET に関わるコードの大半を自動生成することができます。

ここでは、コードジェネレート機能を使用して、データアクセス アプリケーションを作成する方

法について説明します。

以下、SQL Server に接続し、基本的な GUI 操作でデータベース アプリケーションを作成していき

ます。

データベース アプリケーションの画面作成

プロジェクトの作成

Visual Studio .NET を起動し、[新しいプロジェクト(J)]をクリックします。新しいプロジェクトが表

示さるので「Visual Basic プロジェクト」と「Windows アプリケーション」を選択し[OK]をクリッ

クします。

フォームの作成

プロジェクトが作成されたら、次のようにコントロールを貼り付けます。

図 16 フォームに貼り付けるコントロール

貼り付けるコントロールは、次の表 5 の通りです。

表 5 コントロール表

No オブジェクト名 説明

1 DataGrid1 検索結果表示用データグリッド

2 Button1 検索ボタン

3 Button2 更新ボタン

1

2

3

Page 29: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 25

データベースへの接続と SQL ステートメントの生成

ここでは、データアダプタを利用した簡単な GUI 操作でデータベース接続とデータの抽出をする

方法を説明します。

データアダプタの作成

DataGrid1 に検索結果を表示させるためにデータアダプタを作成します。

1. データベースからデータを取得してデータセットを作成するために、[ツールボックス]-[データ]タブから SqlDataAdapter を選択しフォーム上にドラッグします。

図 17 ツールボックスから SqlDataAdapter を選択

2. データベースへの接続設定を行うデータアダプタ構成ウィザードが表示されるので、[次へ

(N)>]をクリックします。

図 18 SqlDataAdapter の作成

Page 30: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 26

3. 利用できる接続設定を選択する「データ接続の選択」が表示されます。データベースへの新

しい接続を定義するために[新しい接続(C)...]をクリックします。

図 19 新しいデータ接続の作成

4. 新しい接続を定義するデータリンク プロパティが表示されるので、接続するサーバーの設定

を定義します。まず、接続するデータベースの種類を選択します。ここでは、プロバイダタ

ブで「Microsoft OLE DB Provider for SQL Server」を選択して[次へ(N)>>]をクリックします。

図 20 プロバイダの選択

Page 31: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 27

5. 次に、データベースに対する接続設定を定義します。ここでの接続設定は、次の表 6 の通り

です。正しく接続できるかは右下にある[接続のテスト(T)]ボタンで確認できます。接続が確

認できたら、[OK]をクリックしてください。これでデータベースに対する接続が定義されま

す。データ構成ウィザードに戻るので[次へ(N)>]をクリックします。

図 21 データベースの接続設定

表 6 データベースの接続設定値

項目名 設定値

サーバー名を選択または入力します。 WINSV

ユーザー名(N): sa

パスワード(P): sa

パスワードを保存する(S) チェック

サーバー上のデータベースを選択する(D): SampleDB

6. データベースに対する接続が定義できたら次に、発行するクエリの種類を選択する「クエリ

の種類の選択」が表示されます。ここでは、クエリを作成するので「SQL ステートメントの

使用(S)」を選択して[次へ(N)>]をクリックします。

図 22 クエリの種類の選択

Page 32: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 28

7. データベースに発行するクエリを作成する「SQL ステートメントの生成」が表示されます。

ここでは、クエリを視覚的に作成するために[クエリビルダ(Q)...]をクリックします。

図 23 SQL ステートメントの生成

8. 視覚的にクエリを作成するクエリ ビルダと対象となるテーブルを選択するテーブルの追加

が表示されます。テーブルの追加では、「M_STAFF」を選択した状態で[追加(A)]をクリック

します。

図 24 テーブルの追加

9. 選択されたテーブルがクエリ ビルダに追加されます。必要となるテーブルが追加できたらテ

ーブルの追加の[閉じる(C)]をクリックします。

Page 33: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 29

10. クエリ ビルダに追加したテーブルが表示されていると思います。抽出したい項目をチェック

することで自動にクエリが作成されます。抽出する項目として「*(すべての列)」をチェッ

クします。チェックをしたら[OK]をクリックします。

図 25 クエリが自動生成されたクエリ ビルダ

11. データアダプタ構成ウィザードの「データアダプタでデータセットに読み込むデータ(W)」に

クエリ ビルダで作成したクエリが表示されます。データアダプタはデータの抽出だけでなく

更新もサポートしていますので[詳細オプション(A)...]をクリックします。

図 26 クエリビルダで作成されたクエリ

Page 34: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 30

12. SQL 生成の詳細オプションが表示されます。更新処理を行うために「INSERT、UPDATE、お

よび DELETE ステートメントの生成(G)」にチェックをして[OK]をクリックします。

図 27 作成する SQL ステートメントの選択

13. データアダプタ構成ウィザードが表示されます。クエリ作成の設定は完了したのでそのまま

[次へ(N)>]をクリックします。

図 28 クエリの作成

14. 「ウィザードの結果の表示」が表示されます。これには、クエリを実際に作成した結果が表

示されます。[完了(F)]をクリックします

図 29 クエリ作成の結果

Page 35: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 31

15. 接続文字列にパスワードを含めますか?が表示されます。これはデータアダプタからデータ

ベースに接続する際に利用するデータコネクションの接続文字列のことです。接続文字列に

パスワードを含めないとアプリケーションがデータコネクションを利用するたびにパスワー

ドの入力が必要になるのでここでは、[パスワードを含める]をクリックします

図 30 データコネクションの接続文字列

16. SqlDataAdapter1 と SqlConnection1 が作成されます。

図 31 作成された SqlDataAdapter1 と SqlConnection1

データアダプタについて

データアダプタについての詳しい情報については、次のサイトを参照してください。

● ウィザードによるデータアダプタの作成

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtskcreatingdataadaptersusingwizard.asp

● データアダプタ構成ウィザード

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vburfADODataSetCommandConfigurationWizard.asp

● 検索クエリの構造

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vdbt7/html/dvconstructureofretrievalqueries.asp

● [SQL 生成の詳細オプション]ダイアログ ボックス

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxurfadvancedsqlgenerationoptionsdialogbox.asp

Page 36: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 32

データセットの作成

作成したデータアダプタを利用してデータセットを作成します。

1. データセットを作成するために SqlDataAdapter1 のプロパティを開きます。プロパティの「デ

ータセットの生成...」をクリックします。

図 32 SqlDataAdapter1 のプロパティ

2. データセットを作成するデータセットの生成が表示されます。新しくデータセットを作成す

るので「新規作成(N)」を選択し[OK]をクリックします。

図 33 SqlDataAdapter1 から新規にデータセットを作成

3. SqlDataAdapter1 から DataSet11 が作成されます。

図 34 作成された DataSet11

Page 37: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 33

データセットの生成について

データセットの生成の詳しい情報については、次のサイトを参照してください。

● [データセットの生成]ダイアログ ボックス

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxurfGenerateDataSetClassDialogBox.asp

検索処理と更新処理の設定

アプリケーションの検索処理と更新処理を設定します。

データグリッドの設定

抽出したデータ(DataSet11)を検索結果表示用データグリッド(DataGrid1)に表示させるための

設定は表7の通りです。DataGrid1 のプロパティ-[DataMember]に「M_STAFF」を[DataSource]に「DataSet11」を選択します。

図 35 DataGrid1 のプロパティ

表 7 DataGrid1 のプロパティに設定する項目

データプロパティ 値

DataMember M_STAFF

DataSource DataSet11

Page 38: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 34

検索処理のコード記述

検索ボタン(Button1)をクリックした際に、検索処理を行うためにコードを記述します。

更新処理のコードの記述

更新ボタン(Button2)をクリックした際に、更新処理を行うためにコードを記述します。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button2.Click

'データセットの内容をデータベースへ反映する

SqlDataAdapter1.Update(DataSet11)

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button1.Click

'データセットの初期化

DataSet11.Clear()

'データセットにデータを読み込む

SqlDataAdapter1.Fill(DataSet11)

End Sub

Page 39: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 35

アプリケーションの実行

デバッグ実行

作成したアプリケーションを実行します。

1. メニューの[デバッグ(D)]-[開始(S)]を選択します。

図 36 アプリケーションの実行

2. フォームが表示されます。検索ボタンをクリックすることによりデータの取得が行われ、デ

ータグリッドに結果が表示されます。

図 37 検索を実行

Page 40: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 36

3. データを更新するときは、データグリッドの中を編集して更新ボタンをクリックすることに

よりデータの更新が行われます。次のデータを追加して更新ボタンをクリックします。

図 38 データグリッドを編集

4. データを更新したら、もう一度検索ボタンをクリックして正しく更新されているか確認しま

す。

図 39 更新したデータ

Page 41: Microsoft Access とdownload.microsoft.com/.../access_vbnet_whitepaper_2.pdfAccess とVisual Basic .NETのデータアクセス テクノロジーの比較 4 ADO.NET の概要.NET

Access と Visual Basic .NET のデータアクセス テクノロジーの比較 37

まとめ

Visual Basic .NET から ADO.NET を使用してデータアクセスを行うことにより、Access よりも高

性能なデータアクセスが容易に実現できます。

ADO.NET を使用してのデータアクセスのメリットをまとめると、次のようになります。

非接続型データアクセスにより快適なパフォーマンスが実現できる

3階層アプリケーションによるスケーラビリティの向上がはかれる

XML 形式のデータ転送の採用により、プラットフォームの異なるアプリケーション間

でのデータの相互運用が実現できる

データセットの使用で、効率よく、ミスの少ない方法でプログラミングすることができ

クエリビルダにより SQL ステートメントを視覚的に組み立てることができ、なおかつ、

SELECT ステートメントに基づいた INSERT、UPDATE、DELETE ステートメント

が自動生成できる

こうしたメリットは、システムのスケーラビリティを高め、インターネット環境で異なるプラッ

トフォーム間での相互運用を実現可能にします。このため、.NET アプリケーションを作成するう

えで、ADO.NET の技術の習得は必要不可欠なものだといえるでしょう。