• 検索結果がありません。

(OnePoint) ( URL Web Copyright 2005 Microsoft Corporation. All rights reserved. MicrosoftWindowsVisual Basic Visual Studio Microsoft Corporation

N/A
N/A
Protected

Academic year: 2021

シェア "(OnePoint) ( URL Web Copyright 2005 Microsoft Corporation. All rights reserved. MicrosoftWindowsVisual Basic Visual Studio Microsoft Corporation"

Copied!
41
0
0

読み込み中.... (全文を見る)

全文

(1)

Microsoft

®

Access と

Microsoft

®

Visual Basic

®

.NET の

(2)

このテキストの中で使用しているアイコンの意味は以下のとおりです。

(OnePoint) 補足情報 (実習) 実習タイトル このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む) は、将来 予告なしに変更することがあります。別途記載されていない場合、このソフトウェアおよび関連するドキュメントで 使用している会社、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、出来事などの名称は架空 のものです。実在する名称とは一切関係ありません。お客様ご自身の責任において、適用されるすべての著作権関連 法規に従ったご使用を願います。 マイクロソフトは、このドキュメントに記載されている内容に関し、特許、特許申請、商標、著作権、またはその他 の無体財産権を有する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のない限り、このドキ ュメントはこれらの特許、商標、著作権、またはその他の無体財産権に関する権利をお客様に許諾するものではあり ません。

Copyright c 2005 Microsoft Corporation. All rights reserved.

Microsoft、Windows、Visual Basic、および Visual Studio は、米国 Microsoft Corporation の米国およびその他の国に おける登録商標または商標です。

(3)

はじめに

このホワイトペーパーでは、Microsoft®

Access(以下、Access と表記します)によるアプリケーシ ョン開発に携わっている方々を対象に、Microsoft®

Visual Basic® .NET(以下、Visual Basic .NET と 表記します)によるプログラミングを、より早く理解していただくことを目的としています。 以下のとおり、ホワイトペーパーは全部で3部構成になっており、このうちの第2部が本ドキュ メントとなります。

z 第1部 「Microsoft Access 開発者のための Microsoft Visual Basic .NET 入門」 Visual Basic .NET の概要や Access と比較して、どのような機能を備えているのかを 簡単に説明します。

z 第2部 「Microsoft Access と Microsoft Visual Basic .NET の データアクセス テクノロジーの比較」

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

z 第3部 「Microsoft Visual Basic .NET による Windowsアプリケーションの作成」 Visual Basic .NET で Windows のアプリケーションのサンプルを作成し、開発手法を 具体的に説明します。

(4)

目次

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

(5)

第1章 Visual Basic .NET で使用する

データアクセス ライブラリ

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

本章では、Visual Basic .NET のデータアクセス ライブラリについて説明し、Access と、どのよう な違いがあるのかを探っていきます。

(6)

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 と表記します)などの外部データベース を操作することができます。

(7)

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 データを操作します。

(8)

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 データの入出力を行うことができます。

(9)

図 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

(10)

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 データソースへのアクセスに対応したプ ロバイダです。

(11)

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

オブジェクト 概要 コネクション データソースへの接続を確立します。 コマンド データソースに対して、データの取得、更新、削除などの コマンドを実行します。 データリーダ データソースから、前方専用、読み取り専用でデータを読み取り ます。 データアダプタ データセットにデータソースのデータを読み込んだり、データセ ットの変更内容をデータソースへ反映したりします。

データセット

データセットは、データソースのコピーを保持するオブジェクトそのもので、読み取った結果を 保持します。 データセットは、すべてのデータソースから独立しているため、複数の異なるデータソースから データを設定することができます。また、XML データを読み取ったり、保持しているデータを XML データとして出力したりすることができます。 データセットは、次のようなオブジェクトで構成されており、DataTables コレクションおよび DataRelation コレクションにて複数のテーブルとリレーションが格納できるようになっています。

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

(12)

ADO.NET のアーキテクチャについて ADO.NET のアーキテクチャの詳しい情報については、次のサイトを参照してください。 ●ADO.NET のアーキテクチャ http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconad onetarchitecture.asp ●.NET Framework プロバイダ http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconad onetproviders.asp ●ADO.NET DataSet http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/ html/cpcontheadonetdataset.asp

(13)

1.2 ADO.NET の特長

Visual Basic .NET から使用する ADO.NET には、Access から使用する DAO や ADO と比較してい くつかの利点があります。 ここでは、次のような観点に絞って各々を比較し、どのような違いがあるのか、また、ADO.NET を利用することで、どういったメリットがあるのかを探っていきます。 z パフォーマンス z スケーラビリティ z 相互運用性

パフォーマンス

Access から DAO や ADO を使用したデータアクセス アプリケーションは、データベースに常時 接続したまま、データを操作する、接続型データアクセスを実行します。接続型データアクセス では、複数のクライアントからのデータアクセスで、システムの負荷が大きくなる場合がありま す。

とくに、DAO から ODBC 接続でデータアクセスする場合は、多くのコンポーネントを使用するた め、クライアント側にも大きくオーバーヘッドが生じます。

(14)

対照的に Visual Basic .NET から ADO.NET を使用したデータアクセス アプリケーションは、デー タベースに常時接続し続けることなくデータを操作する、非接続型データアクセスを実行するこ とができます。 ADO.NET の非接続型データアクセスでは、メモリ上にデータがコピーされた後、データベースと の接続を解除して、このコピーに対してデータを操作することができます。そして、更新された データをデータソースに反映する場合は、データソースとの接続が一時的に復元される仕組みと なっています。 これにより、システムの負荷の大きな原因となる長時間接続がなくなるため、システム全体のパ フォーマンスを向上させることができます。 また、ADO.NET では、接続型データアクセスもサポートしているので、たとえば、他のクライア ントとデータを更新する際の競合を避けたい場合、参照系の処理は非接続型データアクセスで、 更新系の処理は接続型データアクセスで実行するアプリケーションを作成することができます。 このように、非接続型データアクセスと接続型データアクセスを組み合わせて、Access のデータ アクセス アプリケーションよりも、システムの負荷をおさえたアプリケーションの作成すること ができます。

(15)

スケーラビリティ

Access から DAO や ADO を使用してデータアクセス アプリケーションを作成した場合、クライ アント側でプレゼンテーション層(GUI)と機能層(データアクセス処理)が一体化して、サーバ ー側データ層(データベース)とデータをやりとりする2階層アプリケーションとなります。

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

一方、Visual Basic .NET から ADO.NET を使用する場合、プレゼンテーション層と機能層とデータ 層に分けた3階層のデータアクセス アプリケーションが作成できます。Access の2階層アプリケ ーションで言う、クライアント側のプレゼンテーション層と一体化した機能層をサーバー側の独 立した層に配置することができるのです。 これにより、データアクセス処理をサーバー側で実行できるため、クライアント側のシステムリ ソースの不足を軽減して、快適なパフォーマンスのデータアクセスが実現できます。 また、機能層を複数のアプリケーションで共用することができます。この場合、データのレイア ウトなどを変更したときにデータアクセス処理部分については、機能層のプログラムを変更する だけで対応できます。このため、アプリケーションの保守や運用管理が容易になります。 データアクセスを含むシステムは、アクセスするデータに対する要求の増加などに伴って、ハー ドウェア環境やソフトウェア環境を成長させていきます。ADO.NET では3階層アプリケーション により、この成長に対応していくためのスケーラビリティを提供します。

(16)

相互運用性

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 を使用すれば、ネットワーク上のさまざまなプラットフォームのさまざまな種 類のデータにアクセスできる柔軟なアプリケーションが作成できます。

(17)
(18)

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

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

本章では、Access と Visual Studio .NET のプログラミング方法の違いについて説明します。 まずは、データアクセス ライブラリのオブジェクトモデルにふれた上で、クライアント アプリ ケーションからのデータアクセス方法を見ていきます。

(19)

2.1

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

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

DAO のオブジェクトモデル

DAO は、トップレベルの DBEngine オブジェクト以下のオブジェクトを使用してデータベースに アクセスする階層的な構造となっています。主に Jet データベースエンジンへアクセスするための オブジェクトですが、外部のデータベースに接続することも可能です。外部のデータベースに接 続する場合は、ODBC を使用します。

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

(20)

ADO のオブジェクトモデル

ADO のオブジェクトモデルは、DAO に比べるとシンプルな構造となっています。データソースか らデータを取得する際に必ずしも Connection オブジェクトを使用する必要がないことから階層的 でなくフラットな構造となっています。

(21)

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 のオブジェクトモデル

(22)

2.2

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

ここでは、Access で DAO 及び ADO を使用したサンプルコードを記述し、これと同じような処理 を Visual Basic .NET で記述したサンプルコードとの比較を行います。

Access、Visual Basic .NET ともに SQL Server に接続することを前提として以下の処理の流れを比較 します。 z データベース接続 z データ取得 z データ更新 z データベース切断

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

'データベース切断

(23)

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

'データベース切断

(24)

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

'データベース切断

(25)

データ取得

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 メソッドでデータベースへの接続を閉じます。

(26)

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

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

表 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/vboriadon etconnections.asp ● ADO.NET DataSet 作成 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconcr eatingusingdatasets.asp

(27)

第3章 Visual Basic .NET から ADO .NET を

使用したデータアクセス例

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

本章では、Visual Basic .NET から ADO.NET を使用した簡単なデータアクセス アプリケーション の作成方法を説明します。

(28)

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

(29)

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

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

データアダプタの作成

DataGrid1 に検索結果を表示させるためにデータアダプタを作成します。 1. データベースからデータを取得してデータセットを作成するために、[ツールボックス]−[デ ータ]タブから SqlDataAdapter を選択しフォーム上にドラッグします。

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

2. データベースへの接続設定を行うデータアダプタ構成ウィザードが表示されるので、[次へ (N)>]をクリックします。

図 18 SqlDataAdapter の作成

(30)

3. 利用できる接続設定を選択する「データ接続の選択」が表示されます。データベースへの新 しい接続を定義するために[新しい接続(C)...]をクリックします。

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

4. 新しい接続を定義するデータリンク プロパティが表示されるので、接続するサーバーの設定 を定義します。まず、接続するデータベースの種類を選択します。ここでは、プロバイダタ ブで「Microsoft OLE DB Provider for SQL Server」を選択して[次へ(N)>>]をクリックします。

(31)

5. 次に、データベースに対する接続設定を定義します。ここでの接続設定は、次の表 6 の通り です。正しく接続できるかは右下にある[接続のテスト(T)]ボタンで確認できます。接続が確 認できたら、[OK]をクリックしてください。これでデータベースに対する接続が定義されま す。データ構成ウィザードに戻るので[次へ(N)>]をクリックします。

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

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

項目名 設定値 サーバー名を選択または入力します。 WINSV ユーザー名(N): sa パスワード(P): sa パスワードを保存する(S) チェック サーバー上のデータベースを選択する(D): SampleDB 6. データベースに対する接続が定義できたら次に、発行するクエリの種類を選択する「クエリ の種類の選択」が表示されます。ここでは、クエリを作成するので「SQL ステートメントの 使用(S)」を選択して[次へ(N)>]をクリックします。

図 22 クエリの種類の選択

(32)

7. データベースに発行するクエリを作成する「SQL ステートメントの生成」が表示されます。 ここでは、クエリを視覚的に作成するために[クエリビルダ(Q)...]をクリックします。

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

8. 視覚的にクエリを作成するクエリ ビルダと対象となるテーブルを選択するテーブルの追加 が表示されます。テーブルの追加では、「M_STAFF」を選択した状態で[追加(A)]をクリック します。

図 24 テーブルの追加

9. 選択されたテーブルがクエリ ビルダに追加されます。必要となるテーブルが追加できたらテ ーブルの追加の[閉じる(C)]をクリックします。

(33)

10. クエリ ビルダに追加したテーブルが表示されていると思います。抽出したい項目をチェック することで自動にクエリが作成されます。抽出する項目として「*(すべての列)」をチェッ クします。チェックをしたら[OK]をクリックします。

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

11. データアダプタ構成ウィザードの「データアダプタでデータセットに読み込むデータ(W)」に クエリ ビルダで作成したクエリが表示されます。データアダプタはデータの抽出だけでなく 更新もサポートしていますので[詳細オプション(A)...]をクリックします。

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

(34)

12. SQL 生成の詳細オプションが表示されます。更新処理を行うために「INSERT、UPDATE、お よび DELETE ステートメントの生成(G)」にチェックをして[OK]をクリックします。

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

13. データアダプタ構成ウィザードが表示されます。クエリ作成の設定は完了したのでそのまま [次へ(N)>]をクリックします。

図 28 クエリの作成

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

図 29 クエリ作成の結果

(35)

15. 接続文字列にパスワードを含めますか?が表示されます。これはデータアダプタからデータ ベースに接続する際に利用するデータコネクションの接続文字列のことです。接続文字列に パスワードを含めないとアプリケーションがデータコネクションを利用するたびにパスワー ドの入力が必要になるのでここでは、[パスワードを含める]をクリックします

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

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

図 31 作成された SqlDataAdapter1 と SqlConnection1

データアダプタについて データアダプタについての詳しい情報については、次のサイトを参照してください。 ● ウィザードによるデータアダプタの作成 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtskcreat ingdataadaptersusingwizard.asp ● データアダプタ構成ウィザード http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vburfA DODataSetCommandConfigurationWizard.asp ● 検索クエリの構造 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vdbt7/html/dvconstruc tureofretrievalqueries.asp ● [SQL 生成の詳細オプション]ダイアログ ボックス http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxurfad vancedsqlgenerationoptionsdialogbox.asp

(36)

データセットの作成

作成したデータアダプタを利用してデータセットを作成します。 1. データセットを作成するために SqlDataAdapter1 のプロパティを開きます。プロパティの「デ ータセットの生成...」をクリックします。

図 32 SqlDataAdapter1 のプロパティ

2. データセットを作成するデータセットの生成が表示されます。新しくデータセットを作成す るので「新規作成(N)」を選択し[OK]をクリックします。

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

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

図 34 作成された DataSet11

(37)

データセットの生成について データセットの生成の詳しい情報については、次のサイトを参照してください。 ● [データセットの生成]ダイアログ ボックス http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxurfGe nerateDataSetClassDialogBox.asp

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

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

データグリッドの設定

抽出したデータ(DataSet11)を検索結果表示用データグリッド(DataGrid1)に表示させるための 設定は表7の通りです。DataGrid1 のプロパティ−[DataMember]に「M_STAFF」を[DataSource]に 「DataSet11」を選択します。

図 35 DataGrid1 のプロパティ

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

データプロパティ 値 DataMember M_STAFF DataSource DataSet11

(38)

検索処理のコード記述

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

更新処理のコードの記述

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

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

Handles Button2.Click

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

SqlDataAdapter1.Update(DataSet11)

End Sub

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

Handles Button1.Click 'データセットの初期化 DataSet11.Clear() 'データセットにデータを読み込む SqlDataAdapter1.Fill(DataSet11) End Sub

(39)

アプリケーションの実行

デバッグ実行

作成したアプリケーションを実行します。 1. メニューの[デバッグ(D)]−[開始(S)]を選択します。

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

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

図 37 検索を実行

(40)

3. データを更新するときは、データグリッドの中を編集して更新ボタンをクリックすることに よりデータの更新が行われます。次のデータを追加して更新ボタンをクリックします。

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

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

図 39 更新したデータ

(41)

まとめ

Visual Basic .NET から ADO.NET を使用してデータアクセスを行うことにより、Access よりも高 性能なデータアクセスが容易に実現できます。 ADO.NET を使用してのデータアクセスのメリットをまとめると、次のようになります。 z 非接続型データアクセスにより快適なパフォーマンスが実現できる z 3階層アプリケーションによるスケーラビリティの向上がはかれる z XML 形式のデータ転送の採用により、プラットフォームの異なるアプリケーション間 でのデータの相互運用が実現できる z データセットの使用で、効率よく、ミスの少ない方法でプログラミングすることができ る z クエリビルダによりSQL ステートメントを視覚的に組み立てることができ、なおかつ、 SELECT ステートメントに基づいた INSERT、UPDATE、DELETE ステートメント が自動生成できる こうしたメリットは、システムのスケーラビリティを高め、インターネット環境で異なるプラッ トフォーム間での相互運用を実現可能にします。このため、.NET アプリケーションを作成するう えで、ADO.NET の技術の習得は必要不可欠なものだといえるでしょう。

図  1  Access から DAO を使用したシステム形態
図  2  Access から ADO を使用したシステム形態  
表  3  .NET Framework データプロバイダを構成するオブジェクト  オブジェクト  概要  コネクション データソースへの接続を確立します。 コマンド  データソースに対して、データの取得、更新、削除などの  コマンドを実行します。 データリーダ  データソースから、前方専用、読み取り専用でデータを読み取り ます。 データアダプタ  データセットにデータソースのデータを読み込んだり、データセ ットの変更内容をデータソースへ反映したりします。 データセット データセットは、データソースのコピー
図  8  Visual Basic .NET から ADO.NET を使用したデータアクセス  
+6

参照

関連したドキュメント

参加方式 対面方式 オンライン方式 使用可能ツール zoom Microsoft Teams. 三重県 鈴鹿市平田中町1-1

Copyright (C) Qoo10 Japan All Rights Reserved... Copyright (C) Qoo10 Japan All

(※)Microsoft Edge については、2020 年 1 月 15 日以降に Microsoft 社が提供しているメジャーバージョンが 79 以降の Microsoft Edge を対象としています。2020 年 1

Bluetooth® Low Energy プロトコルスタック GUI ツールは、Microsoft Visual Studio 2012 でビルドされた C++アプリケーションです。GUI

Visual Studio 2008、または Visual Studio 2010 で開発した要素モデルを Visual Studio

You may contact BASF Corporation for emergency medical treatment information at 1-800-832-HELP (4357).. Batch code: (Printed on Bottle)

Azure Cloud Native Dojo Azure Light-Up.. ©Microsoft

サテライトコンパス 表示部.. FURUNO ELECTRIC CO., LTD. All Rights Reserved.. ECS コンソール内に AR ナビゲーション システム用の制御