ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料...

25
VB参考資料 【電脳梁山泊 烏賊塾】 -1- Visual Basic.NET では、従来の ADO を従来の方法で使用する事も出来るが、通常、データベースにア クセスする為に ADO.NET を使用する。此処では、Windows 上で動作するアプリケーションの開発に 必要な知識を中心に、ADO ADO.NET の差異を説明する。 Visual Basic 6.0 では、データベースにアクセスする為に ADOActiveX Data Object)を使用するが ADO.NET は、此れを.NET Framework 用に進化させた物で有り、両者は、データアクセスの概念に大 きな差異が有る。 データアクセス用のコンポーネント ADO Visual Basic 6.0 では、データアクセス用のコンポーネントに ADO データコントロール(ADODC)が 有り、下記の機能を提供して居る。 ・データベースに接続する。 ・データベースから必要なデータを取得する。 ・フォーム上のコントロールとデータベースを連結する。 ADO.NET ADO.NET には、ADO の様な便利なコンポーネントは無い。コネクションを使用してデータベースに 接続し、データアダプタを使用して必要なデータを取得する。 データの保持方法 ADO ADO では、取得したデータをレコードセットで管理する。レコードセットは、メモリ上に保持した仮 想テーブルの様な物で有る。 ADO.NET ADO.NET では、データセットに依り、データベースと同じ物をメモリ上に保持する事が出来る。デー タセットには、複数のテーブルの構造や、主キーやリレーションシップ等の属性を定義する事が出来る。 亦、実行時には、取得したデータを管理する事も出来る。 レコードの扱い方 ADO ADO のレコードセットに含まれるレコードは Bookmark プロパティに依り管理されて居り、孰れかの レコードが必ず選択された状態に成って居る。因みに、レコードセットを取得した初期状態では、先頭 のレコードが選択された状態に成って居る。此のレコードをカレントレコードと呼び、亦、MoveNext メソッドや MovePrevious メソッド等に依り、カレントレコードを移動する事が出来る。 ADO.NET ADO.NET には、カレントレコードと謂う概念は無い。其の為、レコードを移動する為のメソッドも無 い。データセットに保持されたデータは、行のコレクションと仕て扱われ、各レコードは、配列の要素 番号を使用して識別する。 A AD DO O A AD DO O. . N NE ET T

Transcript of ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料...

Page 1: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-1-

Visual Basic.NET では、従来の ADOを従来の方法で使用する事も出来るが、通常、データベースにア

クセスする為に ADO.NET を使用する。此処では、Windows 上で動作するアプリケーションの開発に

必要な知識を中心に、ADO と ADO.NET の差異を説明する。

Visual Basic 6.0 では、データベースにアクセスする為に ADO(ActiveX Data Object)を使用するが

ADO.NET は、此れを.NET Framework 用に進化させた物で有り、両者は、データアクセスの概念に大

きな差異が有る。

■ データアクセス用のコンポーネント

ADO Visual Basic 6.0 では、データアクセス用のコンポーネントに ADOデータコントロール(ADODC)が

有り、下記の機能を提供して居る。

・データベースに接続する。

・データベースから必要なデータを取得する。

・フォーム上のコントロールとデータベースを連結する。

ADO.NET ADO.NET には、ADO の様な便利なコンポーネントは無い。コネクションを使用してデータベースに

接続し、データアダプタを使用して必要なデータを取得する。

■ データの保持方法

ADO ADO では、取得したデータをレコードセットで管理する。レコードセットは、メモリ上に保持した仮

想テーブルの様な物で有る。

ADO.NET ADO.NET では、データセットに依り、データベースと同じ物をメモリ上に保持する事が出来る。デー

タセットには、複数のテーブルの構造や、主キーやリレーションシップ等の属性を定義する事が出来る。

亦、実行時には、取得したデータを管理する事も出来る。

■ レコードの扱い方

ADO ADO のレコードセットに含まれるレコードは Bookmark プロパティに依り管理されて居り、孰れかの

レコードが必ず選択された状態に成って居る。因みに、レコードセットを取得した初期状態では、先頭

のレコードが選択された状態に成って居る。此のレコードをカレントレコードと呼び、亦、MoveNext

メソッドや MovePrevious メソッド等に依り、カレントレコードを移動する事が出来る。

ADO.NET ADO.NET には、カレントレコードと謂う概念は無い。其の為、レコードを移動する為のメソッドも無

い。データセットに保持されたデータは、行のコレクションと仕て扱われ、各レコードは、配列の要素

番号を使用して識別する。

AADDOO とと AADDOO..NNEETT

Page 2: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-2-

■ 接続方法

ADO ADO では、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

を取得し、更新する事も可能で有るが、実際には、データの転送時以外は、データベースに接続して居

る必要が無い場合が多い。亦、データベースへの接続を維持する事で、システムリソースを消費し、パ

フォーマンスが低下すると謂う負の側面も有る。

ADO.NET ADO.NET では、データセットに依り、データベースと粗同じ物をメモリ上に保持する事が出来るので

データベースに接続する必要が有るのは、データセットにデータを取得する時と、データセットで変更

した内容をデータベースに転送する時丈で有る。其れ以外の時はデータベースの接続を解除し、データ

セットを利用してデータベース操作を行う。

■ ADO と ADO.NET の使い分け

新規にアプリケーションを開発する時は、ADO.NET を利用すると、豊富なツールを利用して、効率良

くアプリケーションを開発する事が出来る。ADO.NET では、データベースと常時接続する必要が無い

為、システムの負荷を軽減する事が出来る。併し、非接続型故に、大量のレコードの即時更新や、常に

最新の情報が必要な場合には、不適格で有り、此の様な場合は、常時接続型の ADO を利用すると良

い。.NET Framework でも、ADO は、サポートされて居る。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

■ 接続型 ADO(ADODB) 3

■ 非接続型 ADO.NET 12

■ クエリ SQL 24

データベース

フォーム

フォーム

データセット

データベース

データアダプタ

コネクション

Page 3: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-3-

■ 接続型 ADO(ADODB) ■ ADODB.Connection オブジェクト

データベースと接続する為のオブジェクト

Connection オブジェクトは、データソースへの接続を表し、データソースとの固有のセッ

ションを表す。クライアントサーバーデータベースシステムの場合、此のオブジェクトは

サーバーへの実際のネットワークに対応する。

ADODB.Connection の Open メソッド

データソースへの接続を開くメソッド

Connection.Open( 引数 1, 引数 2, 引数 3, 引数 4 )

データソースへの物理的な接続を設定する。此のメソッドが完了すると接続状態が確立し、

コマンドを発行して結果を処理する事が出来る。

引数 1 には、接続情報(ConnectionString、後述)を指定し、省略する事が出来る。

引数 2 には、接続を確立する際に必要なユーザー名を指定し、省略する事が出来る。

引数 3 には、接続を確立する際に必要なパスワードを指定し、省略する事が出来る。

引数 4 には、同期接続、非同期接続の孰れかを示す定数を指定し、省略する事が出来る。

ADODB.Connection の Execute メソッド

指定されたクエリ、SQL ステートメント、ストアドプロシージャ等を実行するメソッド

Connection.Execute( 引数 1, 引数 2, 引数 3 )

指定した接続上で、引数1で指定されたメソッドに渡すクエリが実行される。

引数 1 には、実行する SQL ステートメント、テーブル名等を指定し、必ず指定する。

引数 2 には、プロバイダが返す操作の結果を反映するレコード数を指定し、省略する事が出来る。

引数 3 には、プロバイダが引数 1 を評価する方法を示す定数を指定し、省略する事が出来る。

ADODB.Connection の Close メソッド

開いて居るオブジェクト、及び、依存する総てのオブジェクトを閉じるメソッド

Connection.Close( )

Connection オブジェクトを閉じて、関連するシステムリソースを解放する。

オブジェクトを閉じてもメモリからは削除されず、プロパティ設定を変更してもう一度開く事が出来る。

メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定する(Dispose メ

ソッドがサポートされて居ないオブジェクトの開放は、Nothing を代入する事で行う)。

機 能

解 説

機 能

書 式

解 説

機 能

書 式

解 説

機 能

書 式

解 説

Page 4: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-4-

ADODB.Connection の ConnectionString プロパティ

データソースへの接続を確立する為に必要な情報を設定・取得するプロパティ

Connection.ConnectionString = "キーワード 1=値; キーワード 2=値; …"

セミコロンで区切られた一連の引数と値のセットを含む詳細な接続文字列を引き渡す事に

依りデータソースを指定する。

キーワードの内、省略出来ないキーワードは、Provider と Data Source の 2 種で有る。

Provider キーワード:接続するデータベースの種類を表す。Access2000 形式のデータベースに接続す

る場合は、Microsoft.Jet.OLEDB.4.0 と謂う値を使用する。

Data Source キーワード:接続するデータベースファイル名をドライブ名からパスを含めた形で指定出

来る。パス名を省略した場合は,カレントフォルダが対象に成る。

ADO は、ConnectionString プロパティで 4 種類の引数をサポートして居る。其他の引数は ADO で処

理されずに、直接プロバイダに引き渡される。下記に ADO がサポートする引数を示す。

引数 説明

Provider= 接続に使用するプロバイダ名を指定

File Name= 設定済みの接続情報を含むプロバイダ固有のファイル名を指定

Remote Provider= クライアント側の接続を開く際に使用するプロバイダ名を指定(RDS而巳)

Remote Server= クライアント側の接続を開く際に使用するサーバーのパス名を指定(RDS而巳)

URL= ファイルやディレクトリ等のリソースを識別する絶対 URL を指定

ConnectionString プロパティを設定して Connection オブジェクトを開いた後で、プロバイダがプロパ

ティの内容を変更する場合が有る。例えば、ADO で定義された引数名が、プロバイダで該当する引数

名にマップされる場合等で有る。

ConnectionString プロパティは、Open メソッドの ConnectionString 引数に使用された値を自動的に

継承する。従って、Open メソッドの呼び出し中に現在の ConnectionString プロパティを上書きする事

が出来る。

File Name 引数に依り関連の有るプロバイダが呼び出される為、Provider と File Name 引数の両方を

引き渡す事は出来ない。

接続が閉じて居る場合の ConnectionString プロパティは読み取り・書き込みの両用に成って居るが、

接続が開いて居る場合は読み取り専用に成って居る。

ConnectionString プロパティで引数が重複しても無視される。引数では、最後のインスタンスが適用さ

れる。

RDS での使用:クライアント側の Connection オブジェクトで使用される場合、ConnectionString プ

ロパティには、Remote Provider 及び Remote Server パラメータ而巳を指定する。猶、RDS(Remote

Data Service)とは、Internet Information Server 等を中継して、データソースへのアクセス、及び、

更新を行う事を目的とするオブジェクトを謂う。

機 能

書 式

解 説

Page 5: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-5-

Visual Basic 6.0 に付属して居る OLE DB プロバイダ毎の設定値は、下記の通りで有る。

OLE DB プロバイダ ConnectString プロパティの例

Microsoft Jet 4.0 OLE DB Provider Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MDB ファイル名

Microsoft Jet 3.51 OLE DB Provider Provider=Microsoft.Jet.OLEDB.3.51;Data Source=MDB ファイル名

Microsoft OLE DB Provider for SQL Server Provider=SQLOLEDB;User ID=ユーザーID;Data Source=サーバー名

Microsoft OLE DB Provider for Oracle Provider=MSDAORA; User ID=ユーザーID;Data Source=データベース別名

Microsoft OLE DB Provider for ODBC Drivers Provider=MSDASQL;User ID=ユーザーID;Data Source=データソース名

ADO では、データベースの種類を Connection の Extended Properties プロパティで指定する。下記の

表は、開こうとして居る ISAM の指定に使用する文字列の一覧で有る。

データベース 文字列

dBASE III dBASE III;

dBASE IV dBASE IV;

dBASE 5 dBASE 5.0;

Paradox 3.x Paradox 3.x;

Paradox 4.x Paradox 4.x;

Paradox 5.x Paradox 5.x;

Excel 3.0 Excel 3.0;

Excel 4.0 Excel 4.0;

Excel 5.0 / Excel 95 Excel 5.0;

Excel 97 Excel 97;

Excel 2000 Excel 8.0;

HTML Import HTML Import;

HTML Export HTML Export;

Text(CSV ファイル、TSV ファイル等) Text;

ODBC ODBC;

DATABASE=database;

UID=user;

PWD=password;

DSN=datasourcename;

Persist Security Info は、機密扱いの認証情報を保存するか何うかを設定し、True なら保存する、False

なら保存しないと謂う事に成る。

Persist Security Info を True に設定すると、ユーザーIDやパスワード等のセキュリティ関連情報は、

接続を開いた後も、接続から取得する事が出来る。接続時にユーザーID とパスワードを渡して居る場

合には、接続を開いた後で、其の情報を破棄する事が最も安全で有る。即ち、セキュリティを向上させ

る方法は、Persist Security Info を False に設定する事で有る。

此れは、開いた状態の接続を信頼されて居ないソースに提供したり、接続情報をディスクに保持して居

る場合に特に重要で有る。Persist Security Info を False の儘に仕て置けば、信頼されて居ないソース

は、接続用のセキュリティ関連情報にアクセス出来ず、セキュリティ関連情報が接続文字列情報と共に

ディスクに保存される事も無い。

Persist Security Info は、既定では False に設定されて居る。

Page 6: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-6-

ADODB.Connection の CommandType プロパティ

Command オブジェクトの型を設定・取得するプロパティ

Connection.CommandType = 定数

CommandType プロパティの評価を最適化する目的で使用する。

定数には、下記の CommandTypeEnum 値を設定する。

定数 説明

adCmdText CommandText をコマンド文字列に依る定義、又は、ストアドプロシージャ

の呼出と仕て評価する。

adCmdTable CommandText を、総ての列が内部で生成された SQL クエリーに依り返され

るテーブル名と仕て評価する。

adCmdTableDirect CommandText を総ての列を返すテーブル名と仕て評価する。

adCmdStoredProc CommandText をストアドプロシージャ名と仕て評価する。

adCmdUnknown CommandText プロパティのコマンドタイプは不明で有る(既定値)。

adCmdFile CommandText を永続化されて居る Recordset のファイル名と仕て評価す

る。

adExecuteNoRecords CommandText が、行を返さないコマンド、又は、ストアドプロシージャ(例

えば、データの挿入而巳を行うコマンド)で有る事を示す。行が取得されて

も、其等は破棄され、返されない。常に adCmdText 又は adCmdStoredProc

と組み合わせて使用する。

CommandType プロパティの値が adCmdUnknown(既定値)の場合、パフォーマンスが低下する事が

有る。此れは、CommandText プロパティの型が SQL ステートメント、ストアドプロシージャ、又は

テーブル名の孰れかで有るかを調べる為にプロバイダを呼び出す必要が有る為で有る。使用して居るコ

マンドタイプが明らかな場合は、CommandType プロパティを設定する事に依り、該当するコードに直

接移動する事が出来る。CommandType プロパティが CommandText プロパティのコマンドタイプと

一致しない場合に Execute メソッドを呼び出すと、エラーが発生する。

adExecuteNoRecords 定数は、内部処理を最小限にする事でパフォーマンスを向上させる。此の定数は

単独で使用される事は無い。常に adCmdText 又は adCmdStoredProc と組み合わせて使用される(例

えば、adCmdText+adExecuteNoRecords)。adExecuteNoRecords が Recordset.Open メソッド、又は

メソッドに使用されて居る Command オブジェクトと使用された場合、エラーが発生する。

参考:CommandText プロパティは、SQL ステートメント、テーブル名、又は、ストアドプロシージャ

の呼出等、プロバイダのコマンドを含む文字列型の値を設定・取得するプロパティで、既定値はヌルス

トリング(長さ 0 の文字列)で有る。

通常は SQL ステートメントを使用するが、ストアドプロシージャの呼出等、プロバイダが認識する他

の種類のコマンドステートメントでも構わない。猶、SQL ステートメントは、特定の文法、又は、プロ

バイダのクエリープロセッサがサポートするバージョンでなければ成らない。

CommandType プロパティの設定値に依り、CommandText プロパティが変更される場合が有る。

CommandText プロパティは何時でも読み出す事が出来、ADO がコマンド実行中に使用する実際のコ

マンド文字列の参照も可能で有る。

機 能

書 式

解 説

Page 7: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-7-

ADODB.Connection の CursorType プロパティ

Recordset オブジェクトで使用されて居るカーソルタイプを設定・取得するプロパティ

Connection.CursorType = 定数

Recordset オブジェクトを開く時に使用するカーソルタイプを指定する為に使用する。

定数には、下記の CursorTypeEnum 値を設定する。

定数 説明

adOpenForwardOnly 前方スクロールタイプカーソル。レコードを前方向而巳にスクロール出来

る事を除き、静的カーソルと同じ属性を持つ。レコードセットを一度丈ス

クロールする必要が有る場合は、此のカーソルに依り性能を向上させる事

が出来る(既定値)。

adOpenKeyset キーセットカーソル。動的カーソルと同じ様な属性を持つが、他のユーザ

が追加したレコードを表示せず、使用中のレコードセットから他のユーザ

が削除したレコードへのアクセスを許可しない。猶、他のユーザが変更し

たデータを表示する事は出来る。

adOpenDynamic 動的カーソル。他のユーザに依る追加、変更、及び、削除を観る事が出来

プロバイダがサポートしないブックマークを除いて、レコードセットで許

容されて居る総ての種類の移動を行う事が出来る。

adOpenStatic 静的カーソル。データの検索、又は、レポートの作成に使用する為の、レ

コードの静的コピーで有る。他のユーザに依る追加、変更、又は、削除は

表示されない。

CursorType プロパティは、Recordset が閉じて居る場合は、読み取り・書き込み、開いて居る場合は

読み取り専用に成って居る。

CursorLocation プロパティが adUseClient に設定されて居る場合、adUseStatic の設定而巳サポート

されて居る。サポートされて居ない値が設定された場合でも、エラーは発生しない。此の場合、サポー

トされる最も類似する CursorType が代わりに使用される。

要求したカーソルタイプをプロバイダがサポートして居ない場合、他のカーソルタイプが返される。

Recordset オブジェクトが開いて居る時、CursorType プロパティは実際に使用されて居るカーソルタ

イプと一致する様に変更される。返されたカーソル特有の機能を調べるには、Supports メソッドを使

用する。Recordset を閉じると、CursorType プロパティは元の設定値に戻えう。

注意:動的カーソル、又は、前方スクロールタイプカーソルで Supports(adUpdateBatch) が True を

返す事が有るが、バッチ更新はキーセットカーソル、又は、静的カーソルで行う。LockType プロパテ

ィを adLockBatchOptimisticに設定してから、CursorLocationプロパティを adUseClientに設定して、

バッチ更新に必要な Microsoft Client Cursor Engine を有効にする。

RDS での使用:クライアント側(ADOR)の Recordset オブジェクトで使用される場合、CursorType

プロパティは adOpenStatic に而巳設定する事が出来る。

機 能

書 式

解 説

Page 8: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-8-

ADODB.Connection の CursorLocation プロパティ

カーソルエンジンの場所を設定・取得するプロパティ

Connection.CursorLocation = 定数

此のプロパティで、プロバイダにアクセス可能な様々なカーソルライブラリの中からカーソ

ルエンジンを選択する。通常は、クライアント側カーソルライブラリ、又は、サーバー側カ

ーソルライブラリから選択する。

定数には、下記の定数値を設定する。

定数 説明

adUseNone カーソルサービスは使用されない(此の定数は現在は使用されないが、以前のバージ

ョンとの互換性を保つ為に装備されて居る)。

adUseClient ローカルカーソルライブラリより供給されたクライアント側のカーソルを使用する。

ローカルカーソルエンジンを使うと、ドライバに依り供給されるカーソルには無い多

くの機能を使う事が出来る。従って、此の設定を使用するとより高度な機能が提供さ

れる。以前のバージョンとの互換性を保つ為に、同じ機能の adUseClientBatch もサ

ポートされて居る。

adUseServer データプロバイダカーソル、又は、ドライバに依り供給されるカーソルを使用する。

此等のカーソルは柔軟に使用出来、他のユーザがデータソースに加える変更を検出す

る事が出来る。併し、Microsoft Client Cursor Provider の幾つかの機能(分離され

たレコードセット等)はサーバー側カーソルではシミュレート出来ない為、此等の機

能を此の設定で使用する事は出来ない(既定値)。

此のプロパティ設定は、プロパティが設定された後に確立された接続而巳に作用する。CursorLocation

プロパティを変更しても既存の接続には影響しない。

此のプロパティは、Connection、又は、閉じて居る Recordset 上では読み取り・書き込みで、開いて居

る Recordset 上では読み取り専用で有る。

Connection.Execute カーソルは、此のプロパティ設定を継承する。Recordsets は、自動的に此の設定

を関連付けられた接続から継承する。

ADODB.Connection の RecordSource プロパティ

レコードセットを返すステートメント又はクエリーを設定・取得するプロパティ

Connection.RecordSource = 値

通常は選択クエリ(SELECT 構文)を指定する。

値には、レコードソースを指定する文字列式を指定し、設定値は、下記の通りで有る。

設定値 内容

テーブル名 データベースのテーブルの名前で有る。

SQL クエリー データソースに適した構文を使用した有効な SQL 文字列で有る。

機 能

書 式

解 説

機 能

書 式

解 説

Page 9: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-9-

ADODB.Recordset オブジェクト

検索文(選択クエリ)を発行した際にデータを格納する為のオブジェクト

Recordset オブジェクトは、基に成るテーブルからのレコードセット全体、又は、コマンド

の実行に依り返された結果のレコードを表し、常にレコードセット内の1つのレコード而巳

をカレントレコードと仕て参照する。亦、Recordset オブジェクトは、レコード(行)とフィールド(列)

で構成される。Recordset オブジェクトは必要な丈、作成する事が出来る。

ADODB.Recordset の Open メソッド

カーソルを開くメソッド

Recordset.Open( 引数 1, 引数 2, 引数 3, 引数 4, 引数 5 )

ベーステーブルからのレコード、クエリ結果、又は、以前に保存された Recordset を表すカ

ーソルを開く事が出来る。

引数 1 には、実行する SQL ステートメント、テーブル名等を指定し、省略する事が出来る。

引数 2 には、有効な Connection オブジェクト変数名を指定し、省略する事が出来る。

引数 3 には、Recordset を開く際にプロバイダが使うカーソルタイプを指定し、省略する事が出来る。

引数 4 には、Recordset を開く際にプロバイダが使うロックの種類を指定し、省略する事が出来る。

引数 5 には、プロバイダが引数 1 を評価する方法を示す定数を指定し、省略する事が出来る。

ADODB.Recordset の MoveNext メソッド

指定の Recordset オブジェクトの次のレコードに移動して、其のレコードをカレントレコー

ドにするメソッド

Recordset.MoveNext( )

カレントレコードの位置を Recordset の末尾に向かい 1 レコード進める。

カレントレコードが最後のレコードの場合に MoveNext メソッドを呼び出すと、カレントレコードが

Recordset の最後のレコードの後に設定され、EOF が True に成る。EOF プロパティが既に True の場

合、前方へ移動しようとするとエラーが発生する。

カレントレコードの位置を変更するには、他に下記のメソッドが有る。

MoveFirst Recordset の最初のレコードに移動する。

MoveLast Recordset の最後のレコードに移動する。

MovePrevious Recordset の先頭に向かい 1 レコード戻る。

前方スクロール而巳可能なレコードセットで両方向スクロールのサポートが必要な場合、CacheSize プ

ロパティを使用してカーソルの後方スクロールをサポートするレコードキャッシュを作成し、Move メ

ソッドを使用して移動する事が出来る。キャッシュされたレコードはメモリにロードされる為、必要以

上のレコードのキャッシュは避ける可きで有る。前方スクロール而巳可能なレコードセットで

MoveFirst メソッドを呼び出す事は出来るが、其の結果、Recordset オブジェクトを生成するコマンド

をプロバイダが再度実行する可能性が有る。

機 能

解 説

機 能

書 式

解 説

機 能

書 式

解 説

Page 10: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-10-

ADODB.Recordset の Close メソッド

開いて居るオブジェクト、及び、依存する総てのオブジェクトを閉じるメソッド

Recordset.Close( )

Recordset オブジェクトを閉じて、関連するシステムリソースを解放する。

オブジェクトを閉じてもメモリからは削除されず、プロパティ設定を変更してもう一度開く事が出来る。

メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定する(Dispose メ

ソッドがサポートされて居ないオブジェクトの開放は、Nothing を代入する事で行う)。

ADODB.Recordset の Requery メソッド

クエリを再実行して Recordset オブジェクトのデータを更新するメソッド

Recordset.Requery( 引数 )

オブジェクトの基に成るクエリ(CommandTextプロパティに設定されて居るクエリ)を再

実行して Recordset オブジェクトのデータを更新する。

引数には、此の操作が作用するオプションを示すビットマスクを指定し、省略可能で有る。此のパラメータが adAsyncExecute に設定されて居る場合、此の操作は非同期で実行され、完了するとRecordsetChangeComplete イベントが発生する。 Requery メソッドを使用して、元のコマンドを再実行してデータをもう一度格納する事に依り、データソースから Recordset オブジェクトの内容全体を更新する。此のメソッドの呼出は、Close 及び Openメソッドを連続して呼び出すのと同じ有る。カレントレコードの編集中、又は、新規レコードを追加して居る時に此のメソッドを呼び出すと、エラーが発生する。 Recordset オブジェクトが開いて居る間、カーソルの属性を定義するプロパティ(CursorType、LockType、MaxRecords 等)は読み取り専用に成って居る。此の為、Requery メソッドでは、現在のカーソルしか更新する事は出来ない。カーソルのプロパティを変更して結果を参照するには、Close メソッドを使用してプロパティをもう一度読み取り/書き込み専用にする必要が有る。此の操作の後、プロパティ設定を変更して Open メソッドを呼び出し、カーソルを再度開く。

ADODB.Recordset の RecordCount プロパティ

Recordset オブジェクトに存在する現在のレコード数を示すプロパティ

Recordset.RecordCount

Recordset オブジェクトに有るレコード数を調べる為に使用する。レコード数が解ら無い場

合、又は、プロバイダやカーソルの種類が RecordCount をサポートして居ない場合は、プ

ロパティは -1 を返す。閉じて居る Recordset 上で RecordCount プロパティを読み込むと、エラーが発

生する。

猶、此のプロパティは、ADODB.ConnectionオブジェクトのCursorLocationプロパティが adUseClient

でないと、サーバー側カーソルではシミュレート出来ない為、使用する事は出来ない。

機 能

書 式

解 説

機 能

書 式

解 説

機 能

書 式

解 説

Page 11: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-11-

ADODB.Recordset の Fields コレクション

Recordset オブジェクトの総ての Field オブジェクトが含まれるコレクション

Recordset オブジェクトは、Recordset 内の列に対応する Field オブジェクトで構成される

Fields コレクションを持つ。

Fields コレクションは、コレクション内のオブジェクト数(即ち、フィールドの数)を示す Count プ

ロパティが有る。コレクションのメンバ(要素)は、常に 0 から順に番号が割り当てられる為、0 から

Count プロパティより 1 小さい値迄のループを使用すると、総てのメンバにアクセスする事が出来る。

猶、Count プロパティが 0 の場合、コレクションにはオブジェクトが含まれて居ない事を意味する。

各々のメンバ(Field オブジェクト)は、下記の様に、フィールド名、又は、序数を用いて表わす事が

出来る。 フィールド名使用:Recordset.Fields( "タイトル" )

序 数 使 用:Recordset.Fields( 1 )

序数は、SELECT 文で指定したフィールドの順番(アスタリスク * で総てのフィールドを指定した場

合は、テーブルに定義されて居る順番)に割り当てられ、最初の要素は 0 で有る。 ADODB.Recordset の Field オブジェクト

共通のデータ型を持つデータの列を表すオブジェクト

Fields コレクション内の個々の Field オブジェクトを指す。

Field オブジェクトの Value プロパティを使用して、カレントレコードのデータを設定、又は、参照す

る事が出来る。但し、Field オブジェクトのコレクション、メソッド、プロパティの中には、プロバイ

ダが公開する機能に依っては使用出来ない物も有る。一般に Field オブジェクトのコレクション、メソ

ッド、プロパティを使用して、次の操作が可能で有る。 ・Name プロパティを使用して、フィールド名を参照する。

・Value プロパティを使用して、フィールド内のデータ表示や変更を行う。

・Type、Precision、NumericScale プロパティを使用して、フィールドの基本特性を参照する。

・DefinedSize プロパティを使用して、宣言したフィールドサイズを参照する。

・ActualSize プロパティを使用して、与えられたフィールド内の実際のデータサイズを参照する。

・Attributes プロパティ、Properties コレクションを使用して、指定フィールドで適用出来る機能の種類を識別する。

・AppendChunk、GetChunk メソッドを使用して、長バイナリ型や文字型データを含むフィールドの値を操作する。

猶、総てのメタデータプロパティ(Name、Type、DefinedSize、Precision、NumericScale)は、Field

オブジェクトの Recordset を開く前に利用出来る。動的にフォームを作成する場合に便利で有る。 ADODB.Recordset の EOF プロパティ

カレントレコードの位置が最後のレコードより後に有る事を示すプロパティ

Recordset.EOF

カレントレコードの位置が最後のレコードより後に有る場合は True を返し、カレントレコ

ードの位置が最後のレコード上、又は、其れ以前に有る場合は False を返す。

猶、BOF プロパティは、カレントレコードの位置が最初のレコードより前に有る場合は True を返し、

カレントレコードの位置が最初のレコード上、又は、其れ以降にある場合は False を返す。

BOF 及び EOF プロパティは、Recordset オブジェクトがレコードを含むか何うか、又は、他のレコー

ドに移動した時に Recordset オブジェクトの限界を超えて居ないか何うかを調べる為に使用する。

機 能

書 式

解 説

機 能

解 説

機 能

解 説

Page 12: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-12-

■ 非接続型 ADO.NET ■

データベース操作の概要

ADO.NET で主要なコンポーネントは、データセットとデータプロバイダ(コネクションとデータアダ

プタ等の総称)で有る。データセットは、メモリ上に展開したデータベースで有り、データプロバイダ

は、元のデータベースとデータセットとの橋渡しを行う。

データベースにアクセスして取得したデータをフォームに表示する時のイメージを、下図に示す。

上記の図の内、特に頻繁に使用されるコンポーネントと、各コンポーネントの繋がりを、下図に示す。

猶、下図のコンポーネントを理解すれば、基本的なデータベース操作は、粗自在に行う事が出来る。

特に、Windows アプリケーションを開発する時、データアクセスの中心に成るコンポーネントは、デ

ータアダプタとデータセットで有る。此等は、ウィザードを利用して簡単に作成する事が出来る。デー

タベースの接続に使用する接続文字列や、データを取得したり更新したりする為の SQL ステートメン

トを手動で作成する必要は殆ど無い。

Page 13: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-13-

■ .NET データプロバイダ

.NET データプロバイダは、データベースへの接続や、コマンドを実行してデータの取得や更新を行う

為のコンポーネントの集合で、コネクション、データアダプタ、コマンド、データリーダから構成され

る。.NET Framework に含まれる.NET Framework データプロバイダを次の表に示す。

データプロバイダ 説明

Data Provider for SQL Server Microsoft SQL Server 7.0 以降を使用したデータソースに対応。

System.Data.SqlClient 名前空間を使用する。

Data Provider for OLE DB OLE DB を使用したデータソース(Access 等)に対応。

System.Data.OleDb 名前空間を使用する。

Data Provider for ODBC ODBC を使用したデータソース(Access、MySQL 等)に対応。

System.Data.Odbc 名前空間を使用する。

Data Provider for Oracle Oracle 8.1.7 以降を使用したデータソースに対応。

System.Data.OracleClient 名前空間を使用する。

コネクション

特定のデータベースへの接続を確立するコンポーネントで有る。ADO.NET では、Connection オブジ

ェクトを使用して、接続文字列に必要な認証情報を指定する事に依り、特定のデータソースに接続す

る。.NET Framework に含まれて居る各.NET Framework データプロバイダは、Connection オブジェ

クトを持って居る。何の Connection オブジェクトを使用するかは、データソースの種類に依り異なる。

データアダプタ

データベースとデータセットを連結するコンポーネントで、下記の機能を有する。

・データベースから取得したデータをデータセットに格納する。

・データセットの内容でデータベースを更新する。

亦、データアダプタは、上記の機能を果たす為に、下記の 4 個のコマンドを有する。

・選択コマンド:必要なデータを抽出する(SelectCommand)。

・追加コマンド:レコードを追加する(InsertCommand)。

・削除コマンド:レコードを削除する(DeleteCommand)。

・更新コマンド:レコードを更新する(UpdateCommand)。

データアダプタは、上記のコマンドを実行する時、自動的にデータベースに接続し、処理を終了した後

は、接続を解除する。其の為、データベースへの接続と解除を手動で行う必要は無い。

コマンド

データベースに対して実行するコマンドを保持するコンポーネントで有る。

データリーダ

コマンドを実行した結果、データベースから、読込専用、前方スクロール可能な形で読み込んだデータ

で有る。

猶、Windows アプリケーションを開発する場合は、主にデータアダプタとコネクションを使用し、コ

マンドとデータリーダは、Web アプリケーションの開発に利用する。

Page 14: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-14-

■ データセット

データセットは、アプリケーションが使用するデータベースを、メモリ上に展開した物で有る。データ

ベースと同じ様に、データセットには、複数のテーブルを定義する事が出来る。亦、主キーの様なテー

ブル属性やリレーションシップを設定して、テーブル間の関連付けを定義する事が出来る。アプリケー

ションの実行時には、定義したテーブルにデータを保持する事が出来る。

データセットは、接続するデータソースから完全に独立して居る。其の為、下図の様に、種類の異なる

データベースから取得したデータを、同じデータセットに保持する事も可能で有る。亦、データセット

内のデータは、データベースの種類に係らず、同じ手法でアクセスする事が出来る。

データセット内のデータは、アプリケーション実行中、メモリに常駐する。レコードの編集や、必要な

データの抽出等の作業は、総てデータセット上で行う。其の為、レコード操作を行うと、データセット

の内容と元のデータベースの内容は、異なる物に成る。此の両者の同期を取る為には、データアダプタ

が保持して居るデータベース更新用のコマンド(Update メソッド)を使用する。此のコマンドを実行

すると、再びデータベースに接続して、データを更新し、処理を終了した後は、接続を解除する。

通常の多階層の実装で DataSet を作成・変更し、次に元のデータを更新する手順を、下記に示す。

1.DataAdapter の Fill メソッドを使用して、DataSet 内に DataTable を作成し、各テーブルにデー

タソースのデータを格納する。 2.DataRow オブジェクトを追加、更新、又は、削除して、個別の DataTable オブジェクト内のデー

タを変更する。 3.GetChanges メソッドを呼び出して、データへの変更丈を格納する 2 個目の DataSet を作成する。 4.此の 2 個目の DataSet を引数と仕て渡して、DataAdapter の Update メソッドを呼び出す。 5.Merge を呼び出して、2 つ目の DataSetに格納された変更を最初のデータセットにマージする。 6.DataSet で AcceptChanges を呼び出す。変更をキャンセルするには、RejectChanges を呼び出す。

Access

データベース

Oracle

データベース

SQL Server

データベース

データセット

Page 15: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-15-

OleDbConnection クラス

データソースへの開いた接続を表すクラス

OleDbConnection オブジェクトは、データソースへの一意な接続を表す。サーバーとクライ

アントで構成されるデータベースシステムでは、サーバーへのネットワーク接続に相当する。

OleDbConnection オブジェクトは、適用範囲外に抜けても、自動的に閉じられる事は無い。即ち、例え

ば、プロシージャレベルで宣言した変数に割り当てられた OleDbConnection オブジェクトを開いた場

合、其のプロシージャを抜けても、自動的に閉じられる事も、オブジェクト自体がメモリから開放され

る事は無い。其の為、Close メソッドや Dispose メソッドを呼び出すか、OleDbConnection オブジェク

トを Using ステートメント内に記述する事に依り、明示的に接続を閉じる必要が有る。

OleDbConnection クラスのコンストラクタ

OleDbConnection オブジェクトを生成するメソッド

Dim 変数 As New OleDbConnection( 接続文字列 )

接続文字列を指定して、OleDbConnection クラスの新しいインスタンスを初期化する。

引数の接続文字列には、データベースを開く為に使用する接続を表す文字列を指定する。ACCESS デ

ータベースを接続する為の接続文字列は、下記の様に成る。

例 1:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb"

例 2:"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:¥access_db¥data.mdb"

上記の例1では、プロバイダに Microsoft.Jet.OLEDB.4.0(Access 2000 以降用)を、データソース(接

続対象と成るデータベース)にEXEファイルと同じフォルダに格納された data.mdbを指定して居る。

猶、接続対象と成るデータベースが EXE ファイルと同じフォルダに格納されて居ない場合は、例 2 の

様に、フルパスで指定する必要が有る。

猶、セキュリティ情報に関して、Persist Security Info や Integrated Security も指定する事も出来る。

OleDbConnection クラスの新しいインスタンスを作成すると、読み書き可能プロパティは、引数の接続

文字列のキーワードを関連付けて設定した場合を除いて、下記の初期値に設定される。

プロパティ 初期値

ConnectionString 引数で指定した接続文字列

ConnectionTimeout 15

Database 空の文字列( "" )

DataSource 空の文字列( "" )

猶、此等のプロパティの値を変更するには、ConnectionString プロパティを使用する必要が有る。

OleDbConnection クラスのコンストラクタには、引数を指定しない形のオーバーロードも有る。此のコ

ンストラクタを使用した場合は、インスタンスを生成した後、ConnectionString プロパティで、プロバ

イダやデータソースを指定する必要が有る。

機 能

書 式

解 説

機 能

解 説

Page 16: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-16-

OleDbConnection クラスの Open メソッド (参考)

ConnectionString で指定したプロパティ設定を使用してデータベース接続を開くメソッド

Object.Open( )

接続プール内で開いて居る接続が利用出来る場合は、其の接続を使用し、利用出来ない場合

は、データソースへの新しい接続を確立する。

OleDbConnection は、適用範囲外でも自動的に閉じられる事はない。其の為、Close や Dispose を呼び

出すか、接続を Using ステートメント内に記述して、使用後は、明示的に接続を閉じる必要が有る。

OleDbConnection クラスの Close メソッド

データソースへの接続を閉じるメソッド

Object.Close( )

保留中のトランザクションをロールバックし、其の後、接続を接続プールに解放する。接続

プールが無効の場合は、接続を閉じる。

StateChange イベントの処理中に Close メソッドを呼び出しても、更に StateChange イベントが発生

する事は無い(イベントの連鎖は無い)。亦、プログラム中で、複数回 Close メソッドを呼び出しても

例外(エラー)は発生しない。

Close メソッドは、関連するシステムリソースを開放する丈で、オブジェクトをメモリから削除する訳

では無い。メモリから削除するには、Dispose メソッドを実行する必要が有る。

機 能

書 式

解 説

機 能

書 式

解 説

DataAdapter に依る Connection の Open と Close

DataAdapterクラスのFillメソッドを使用してデータベースよりDataSetオブジェクトに行を取得

する場合、及び、Update メソッドを使用して DataSet オブジェクトに加えられた変更をデータベ

ースに書き戻す場合には、Connection の開始と終了を明示的に行う必要は無い。

Fillメソッドは、接続が未だ開いて居ない事を認識するとDataAdapterが使用して居る Connection

を暗黙的に開く。Fill が接続を開いた場合は、Fill の終了時に Fill が接続を終了する。此れは、マ

ニュアルには記載されて居ないが、Update メソッドの場合も、同様で有る。

猶、Fillを呼び出す前に接続が開いて居た場合は、接続は開いた儘に成る。此れに依り、FillやUpdate

等の単一の操作を扱う場合にコードを簡略化出来る。

此れに対し、開いて居る接続を必要とする複数の操作を実行する場合は、Connection の Open メソ

ッドを明示的に呼び出し、データソースに対する操作の実行後に Connection の Close メソッドを呼

び出す事でアプリケーションのパフォーマンスを改善出来る。リソースを解放して他のクライアン

トアプリケーションが使用出来る様にする為に、データソースへの接続を開いた儘にする時間は最

小限にする事を推奨する。

Page 17: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-17-

OleDbConnection クラスの ConnectionString プロパティ (参考)

データベースを開く為に使用する文字列を取得・設定するプロパティ

Object.ConnectionString = 接続文字列

データソース名を含む OLE DB プロバイダ接続文字列、及び、初期接続を確立する為に必

要な其の他のパラメータを指定する。

接続文字列の書式は、OLE DB 接続文字列の書式と粗一致して居るが、下記の相違点が有る。

・Provider 句は必須で有る。指定出来るプロバイダには、Microsoft.Jet.OLEDB.4.0(Access 2000 以

降)、SQLOLEDB(SQL Server 6.0 以前)、MSDAORA(Oracle 8.1.7 未満)等が有る。

・ODBC や ADOとは異なり、Persist Security Info を false(既定値)に設定すると、ユーザーが設定

した接続文字列からセキュリティ情報を除いた接続文字列が返される。Persist Security Info キーワ

ードを true に設定した場合(非推奨)を除き、OleDbConnection では、接続文字列のパスワードは

永続化されず、返されない。高度なセキュリティレベルを維持する為には、Persist Security Info を

false に設定して、Integrated Security キーワードを使用する事が推奨されて居る。

接続文字列の例を、下記に示す。

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:¥bin¥LocalAccess40.mdb"

"Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI"

"Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=Yes"

接続文字列中に Data Source キーワードを指定しない場合、プロバイダは、利用可能なローカルサーバ

への接続を試みる。

ConnectionString プロパティを設定出来るのは、接続が閉じて居る時丈で有る。接続文字列値の多くに

は、対応する読み取り専用プロパティが有る。接続文字列を設定すると、エラーが検出された場合を除

いて、此等のプロパティが更新される。エラーが発生した場合は、孰れのプロパティも更新されない。

OleDbConnection プロパティは、ConnectionString に含まれて居る設定丈を返す。

閉じた接続に対して ConnectionString をリセットすると、総ての接続文字列値と関連プロパティがリ

セットされる(パスワードも対象と成る)。例えば、Initial Catalog= AdventureWorks を指定した接続

文字列を設定した後で、此の接続文字列を下記の様ににリセットすると、Database プロパティは

AdventureWorks に設定されない(接続文字列の Initial Catalog 値は、Database プロパティに対応す

る)。

Provider= SQLOLEDB;Data Source= MySQLServer;IntegratedSecurity=SSPI

プロパティの設定時には、接続文字列に対して予備的な検証が実行される。Provider、Connect Timeout、

Persist Security Info、OLE DB Services の値が文字列に含まれて居る場合は、此等の値がチェックさ

れる。アプリケーションが Open メソッドを呼び出した時は、接続文字列が完全に検証される。接続文

字列に無効なプロパティやサポートされないプロパティが含まれて居る場合は、ArgumentException

等の実行時例外が発生する。

機 能

書 式

解 説

Page 18: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-18-

OleDbDataAdapter クラス

データソースとデータセットの間を仲介するクラス

データセットへのデータの格納とデータソースの更新に使用される一連のデータコマンド

とデータベース接続を表す。

DataAdapter は、DataSet とデータソースとの間でデータの取得と保存を行う為の、仲介の役割を果た

す。DataAdapter は、其の為に、DataSet 内のデータをデータソース内のデータと一致する様に変更す

る Fill メソッドと、データソース内のデータを DataSet 内のデータと一致する様に変更する Update

メソッドが用意されて居る。

OLE DB をサポートするデータソース(Access 等)に接続する場合は、関連付けられた OleDbCommand

オブジェクトや OleDbConnection オブジェクトと共に OleDbDataAdapter を使用する事に依り、全体

的なパフォーマンスを向上させる事が出来る。

データベースの種類 最適化されたクラス

OLE DB データソース OleDbCommand、OleDbConnection、OleDbDataAdapter

SQL Server データベース SqlCommand、SqlConnection、SqlDataAdapter

ODBC データソース OdbcCommand、OdbcConnection、OdbcDataAdapter

Oracle データベース OracleCommand、OracleConnection、OracleDataAdapter

DataAdapter のインスタンスを作成すると、読み書き可能プロパティが初期値に設定される。此等の初

期値の一覧に付いては、DataAdapter コンストラクタの記述を参照され度い。

OleDbDataAdapter クラスのコンストラクタ

OleDbDataAdapter オブジェクトを生成するメソッド

Dim 変数 As New OleDbDataAdapter( 選択クエリ, 接続 )

SelectCommand クラスの CommandText プロパティを使用して、OleDbDataAdapter クラ

スの新しいインスタンスを初期化する(4 種のオーバーロードが有る)。

引数の選択クエリには、SQL SELECT ステートメント、又は、ストアドプロシージャで有る文字列を

指定する。此の文字列は、OleDbDataAdapter の SelectCommand プロパティに使用される。 亦、引

数の接続には、接続を表す OleDbConnection を指定する。

OleDbDataAdapter の実装では、OleDbConnection が開いて居ない場合は、此の接続が開かれ、再び

閉じられる。此れは、アプリケーションで複数の OleDbDataAdapter オブジェクトの Fill メソッドを

呼び出す必要が有る場合に効果的で有る。OleDbConnection が既に開いて居る場合、其の接続を閉じる

には、明示的に Close メソッドや Dispose メソッドを呼び出す必要が有る。

OleDbDataAdapter のインスタンスを作成すると、下記の様に読み取り/書き込みプロパティが初期値

に設定される。

プロパティ 初期値

MissingMappingAction MissingMappingAction.Passthrough

MissingSchemaAction MissingSchemaAction.Add

機 能

解 説

機 能

書 式

解 説

Page 19: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-19-

OleDbDataAdapter クラスの Fill メソッド

データを DataSet に取り込むメソッド

Object.Fill( データセット名, テーブル名 )

DataSet 名と DataTable 名を使用して、データソース内の列と一致する様に DataSet 内の

行を追加・更新する(7 種のオーバーロードが有る)。

引数のデータセット名には、レコード、及び、必要に応じてスキーマを格納する為の DataSet を指定す

る。亦、引数のテーブル名には、テーブルマップに使用するソーステーブルの名前を指定する。

亦、戻り値には、DataSet で正常に追加や更新された行数が返される。此れには、行を返さないステー

トメントの影響を受ける行は含まれない。コマンドが行を返さない場合は、DataSet にテーブルは追加

されない(此の場合、例外は発生しない)。

Fill メソッドは、SELECT ステートメントを使用して、データソースからデータを取得する。SELECT

コマンドに関連付けられた IDbConnection オブジェクトは、有効な物で有る必要が有るが、開いて居

る必要は無い。Fill メソッドを呼び出す前に IDbConnection が閉じて居る場合は、接続が開かれ、デ

ータを取得した後で再び閉じられる。Fill メソッドを呼び出す前に接続が開いて居た場合は、接続は開

いた儘に成る。

DataTable へのデータの格納中に重複する列が存在する場合、2 番目以降の列には、DbDataAdapter

オブジェクトに依り、自動的に columnname1、columnname2、columnname3 の様な形式で名前が付

けられ、亦、受信したデータに無名の列が含まれて居た場合は、Column1、Column2 の様な形式の名

前で DataSet に列が格納される。

指定したクエリが複数の結果を返す場合は、各結果セットが個別のテーブルに格納される。2 番目以降

の結果セットには、指定されたテーブル名に整数値を追加した名前が付けられる。例えば、Table、Table1、

Table2 の様に成る。行を返さないクエリではテーブルは作成されない。従って、挿入クエリの後で選択

クエリを処理した場合、選択クエリで作成されるテーブルが最初に作成されるテーブルに成る為、此の

テーブルが Table と謂う名前に成る。アプリケーションで列名やテーブル名を使用する時は、此等の名

前付けパターンとの衝突が発生しない様に注意する必要が有る。

Fill メソッドは、大文字と小文字の違いを除いて名前が一致する DataTable オブジェクトが DataSet

内に複数含まれる場合に、其等を区別する。此の場合、Fill メソッドは、大文字と小文字を区別して比

較を実行し、対応するテーブルを見付ける。正確に一致するテーブルが存在しない場合は、新しく作成

する。此の動作を表すコード例を、下記に示す。

Dim Ds As DataSet = new DataSet( )

Ds.Tables.Add("aaa")

Ds.Tables.Add("AAA")

Adapter.Fill( Ds, "aaa" ) ' 既に DataSet内に存在する "aaa" に充填する。

Adapter.Fill( Ds, "Aaa" ) ' 新しい "Aaa" と謂う名前のテーブルを追加する。

猶、ActiveX データオブジェクト(ADO)と ADO.NET 間のリンクを行う為に、下記のオーバーロー

ドも用意されて居る。

OleDbDataAdapter.Fill (DataTable, Object)、OleDbDataAdapter.Fill (DataSet, Object, String)

機 能

書 式

解 説

Page 20: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-20-

OleDbDataAdapter クラスの SelectCommand プロパティ

選択クエリの取得と設定を行うプロパティ

Object.SelectCommand = OleDbCommand

データソース内のレコードを選択する為の SQL ステートメント、又は、ストアドプロシー

ジャの取得と設定を行う。

引数の OleDbCommand には、Fill 処理中に、DataSet に格納するレコードをデータソースから選択す

る為の OleDbCommand オブジェクトを指定する。

作成済みの OleDbCommand に SelectCommand が割り当てられた場合、OleDbCommand のクローン

は作成されない。SelectCommand に依り、作成済みの OleDbCommand オブジェクトへの参照が維持

される。

OleDbCommand クラスの CommandText プロパティ

クエリの取得と設定を行うプロパティ

Object.CommandText = クエリ

データソースで実行するSQLステートメントやストアドプロシージャの取得と設定を行う。

引数のクエリには、実行する SQL ステートメント、又は、ストアドプロシージャを指定する(既定値

は空の文字列)。

CommandType プロパティの値に依り、CommandType プロパティに設定する文字列の種類を、下記

に示す。

CommandType プロパティ CommandType プロパティ

StoredProcedure ストアドプロシージャ名 ※1

TableDirect テーブル名 ※2

Text SQL ステートメント ※3

※1 ストアドプロシージャ名に特殊文字が含まれる場合、エスケープ文字の構文を使用する必要が有

る。孰れかの Execute メソッドを呼び出すと、コマンドが此のストアドプロシージャを実行する。

※2 テーブル名に特殊文字が含まれる場合は、エスケープ文字の構文を使用する必要が有る。孰れか

の Execute メソッドを呼び出すと、指定したテーブルの総ての行と列が返される。

※3 OLE DB.NET プロバイダでは、OleDbCommand が呼び出す SQL ステートメントやストアドプ

ロシージャにパラメータを渡す為の名前付きパラメータは利用出来ない。此の場合は、疑問符プ

レースホルダを使用する。次に例を示す。

SELECT * FROM 本 WHERE ID = ?

従って、パラメータの疑問符プレースホルダの位置と、OleDbParameter オブジェクトを

OleDbParameterCollection に追加する順序とを、正しく対応させる必要が有る。

現在の接続で実行、又は、フェッチ操作が実行中の場合は、CommandTextプロパティは設定出来ない。

機 能

書 式

解 説

機 能

書 式

解 説

Page 21: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-21-

DataSet オブジェクト・1

データのメモリ内キャッシュを表すクラス

データソースから取得されたデータをメモリ内にキャッシュする。

DataSet オブジェクトは、ADO.NET で非接続型分散データシナリオをサポートする上で中心的な役割

を果たすクラスで有る。DataSet はメモリ内に常駐するデータ表現で有り、データソースの違いに拘ら

ず、一貫性の有るリレーショナルプログラミングモデルを提供する。複数の異なるデータソースや XML

データと組み合わせて使用する事が出来、亦、アプリケーションに取ってローカルなデータの管理にも

使用する事が出来る。DataSet は、関連テーブル、制約、及び、テーブル間のリレーションシップを含

む、完全なデータセットを表現する。DataSet オブジェクトモデルを、下図に示す。

DataSet は、DataRelation オブジェクトと相互に関連付ける事が出来る DataTable オブジェクトのコ

レクションで構成される。UniqueConstraint オブジェクトと ForeignKeyConstraint オブジェクトを

使用して、DataSet 内でデータの整合性を適用する事も出来る。

DataTable オブジェクトにはデータを格納出来るのに対して、DataRelationCollection を使用するとテ

ーブルの階層構造内を移動出来る。テーブルは、Tables プロパティを使用してアクセス出来る

DataTableCollection に格納される。DataTable オブジェクトにアクセスする時は、条件付きで大文字

と小文字が区別される事に注意され度い。例えば、mydatatable と謂う名前の DataTable と

Mydatatable と謂う名前のテーブルが有る場合は、此の 2 つのーブルの孰れかを検索する文字列は大文

字と小文字を区別すると看做される。但し、mydatatable と謂う名前は存在するが Mydatatable と謂

う名前が存在しない場合は、検索文字列は大文字と小文字を区別しないと看做される。

DataSet では、データとスキーマを XML ドキュメントとして読み取ったり、書き込んだり出来る。読

み込んだデータとスキーマは、HTTP で転送出来、XML 対応の総てのプラットフォーム、及び、アプ

リケーションで使用出来る。スキーマを XML スキーマと仕て保存するには WriteXmlSchema メソッ

ドを使用する。スキーマとデータの両方を保存するには WriteXml メソッドを使用する。スキーマとデ

ータの両方を含む XML ドキュメントを読み取るには、ReadXml メソッドを使用する。

機 能

解 説

Page 22: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-22-

データソースからデータを取得して、DataSet オブジェクトに充填するには、通常、DataAdapter クラ

スの Fill メソッドを使用する。

Fill メソッドを呼び出して DataSet オブジェクトに充填した時、下図の様に、DataSet オブジェクト、

DataTable オブジェクト、DataRowオブジェクトが階層化される。

テーブルの指定

DataTable オブジェクトは、DataSet 内に充填されたテーブルを表し、DataSet オブジェクトの Tables

コレクションから取得する事が出来る。

例:テーブル名が BOOKのテーブルを指定する。

Ds.Tables("BOOK")

レコード(行)の指定

DataRow オブジェクトは、DataSet 内に充填されたテーブルに含まれるレコードを表し、DataSet オ

ブジェクト内の DataTable オブジェクトの Rows コレクションから取得する事が出来る。

例:テーブル名が BOOKのテーブルの最初のレコードを指定する。

Ds.Tables("BOOK").Rows(0)

フィールド(列)の指定

指定レコード内のフィールドは、Item プロパティから取得する事が出来る。Item プロパティは、フィ

ールドの値を Object 型で返すプロパティで有る。

例:テーブル名が BOOKのテーブルの最初のレコードの IDフィールドを指定する。

Ds.Tables("BOOK").Rows(0).Item("ID")

猶、フィールド値が Null 値か何うかを調べる場合は、下記の様に、IsNull プロパティを使用する。

If Ds.Tables("BOOK").Rows(0).IsNull("ID") Then

' 値が Null 値の場合の処理

End If

Page 23: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-23-

DataSet 内のテーブル名とフィールド名

Rowsコレクション内の特定のDataRowオブジェクトを指定するには、0から始まる序数を使用するが、

Tables コレクション内の特定の DataTable オブジェクトを指定する場合や、DataRow オブジェクト内

の特定の Item プロパティを指定する場合には、0 から始まる序数以外に、テーブル名やフィールド名

で指定する事が出来る。

テーブル名とフィールド名は、DataAdapter オブジェクトの TableMappings プロパティで決まる。明

示的に TblaMappings プロパティを設定しなかった場合は、フィールド名は、クエリに含まれるフィー

ルド名に合致する様に自動的に設定されるが、テーブル名は、既定値で TableN(N は連番)と成る。

其の為、任意のテーブル名を指定し度い時は、Fill メソッドを呼び出す時に、DataSet オブジェクトの

Tables コレクションと仕て格納し度いテーブル名を第 2 引数に指定する。

例:DataSet オブジェクト内のテーブル名を BOOK に指定して読み込む。

Dim DaB As OleDbDataAdapter

DaB = New OleDbDataAdapter("SELECT * FROM 本", Cn)

DaB.Fill(Ds, "BOOK")

DataTable クラスの Clear メソッド

DataTable から総てのデータを消去するメソッド

Object.Clear( )

テーブルから総てのレコード(行)が削除される。

子レコードを孤立させる様な子リレーションシップが適用されて居る場合は、例外が発生する。

データセット内の特定のテーブルをクリアするには、下記の様に記述する。

データセット名.Tables("テーブル名").Clear

DataRowCollection クラスの Count プロパティ

レコード数を表す値を取得するプロパティ

Object.Count

DataRowCollection コレクション内の DataRowオブジェクトの合計数を取得する。

データセット内の特定のテーブルのレコード数を取得するには、下記の様に記述する。

データセット名.Tables("テーブル名").Rows.Count

※ データベース操作に於いて、通常、1 件分のデータをレコード、1 レコードに含まれる個々のデータ

をフィールドと呼ぶが、レコードを行(Row)、フィールドを列(Column)と謂う事も多い。書籍

等では、孰れの呼称も使用されて居るので、不要な誤解を招かない為にも、両者が同じ物を表して

居る事を認識して置いた方が良い。

機 能

書 式

解 説

機 能

書 式

解 説

Page 24: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-24-

SQL(Structured Query Language:構造化照会言語)とは

直訳すると難しく成るが、プログラミング知識の無いオペレーターが簡単にデータを操作出来る様に編

み出された言語で有る。国際規格(ISO)にも定められて居る為、ORACLE でも SQLServer でも基本

は同じで有る。4つの構文を覚える事で、様々な、データーベースのデータを扱う事が可能に成る。

SQL の4大構文

下記の構文を SQL の4大構文と謂う。

SELECT 文 :データを選択する文

DELETE 文 :データを削除する文

INSERT 文 :データを追加する文

UPDATE 文 :データの内容を変更する文

SELECT 文の解説

データを探す構文

SELECTΔフィールド名ΔFROMΔテーブル名ΔWHEREΔ検索条件

例文1:SELECTΔ*ΔfromΔ本;

解 説:『*』(アスタリスク)は、フィールド総てを表す。

本と謂う名前のテーブルに在る全件数のレコードを検索し、総てのフィールドのデータを取得する

例文2:SELECTΔタイトル,価格ΔfromΔ本;

解 説:フィールドを複数指定する場合は『タイトル,価格』の様に『,』(コンマ)で区切る。

本と謂う名前のテーブルに在る全件数のレコードを検索し、タイトル、価格フィールドのデータを取得する

例文3:SELECTΔ*ΔfromΔ本ΔWHEREΔ価格=2500;

解 説:『*』(アスタリスク)は、フィールド総てを表す。

本と謂う名前のテーブルに在る価格フィールドが 2500 のレコードを検索し、総てのフィールドのデータを取得する

例文4:SELECTΔ*ΔfromΔ本ΔWHEREΔタイトルΔLIKEΔ’%VB%’;

解 説:SQL 文内で文字列を指定する場合は『’』(シングルクオーテージョン)で区切る。

本と謂う名前のテーブルに在るタイトルフィールドに’VB’という文字列が含まれるレコードを検索し、総てのフィールド

のデータを取得する

例文5:SELECTΔ本.タイトル,本.価格,著者.著者名ΔfromΔ本,著者ΔWHEREΔ本.著者 ID=著者 ID;

解 説:複数テーブルを関連付けた SELECT 文を記述する事が出来る。使用するテーブル

は From 句の後ろに 2 つ目以降『,』(コンマ)で区切り、指定する。亦、フィールド

指定は必ず『テーブル名.フィールド名』とする。理由は、異なるテーブルで、同じ

フィールド名を使用して居るケースも有るから。

本テーブルの著者 ID フィールドと著者テーブルの ID フィールドを関連付け、本.タイトル、本.価格、著者.著者名フィ

ールドのデータを取得する

△は半角スペースを意味する(以下、総ての構文で同じ)。

ACCESSで SQL 文を使用する場合は、文の末尾にセミコロン( ; )を付ける。

機 能

書 式

解 説

Page 25: ADDOO とと ADDOO.junko036.html.xdomain.jp/school/automation/ref/vb01g.pdfVB参考資料 【電脳梁山泊 烏賊塾】 -2- 接続方法 ADO ADOでは、データベースに常時接続した状態で使用するのが基本で有る。其の為、常に最新のデータ

VB参考資料 【電脳梁山泊 烏賊塾】

-25-

DELETE 文の解説

データを削除する構文

DELETEΔFROMΔテーブル名ΔWHEREΔ条件

例文1:DELETEΔFROMΔ本ΔWHEREΔ価格=2500;

解 説:SELECT 文と似て居るが、DELETE 文の場合はフィールド名を指定し無い。

本と謂う名前のテーブルの価格が 2500 と謂うデータレコードを削除する

例文2:DELETEΔFROMΔ本;

解 説:条件を指定し無いと、総てのデータレコードが削除される。

本と謂う名前のテーブルのデータレコードを総て削除する

INSERT 文の解説

データを追加する構文

INSERTΔINTOΔテーブル名(フィールド名,フィールド名)ΔVALUES(追加する数値データ,’追加する文字列データ’)

例文1:INSERTΔINTOΔ本ΔVALUES(9,’VB ファン’,4000,’2000/5/5’,4,4);

解 説:例えば『VB ファン』の様に、文字列型のデータを追加する場合は、『’』(シングル

クオーテーション)で区切る。亦、フィールドとフィールドを区切る文字は『,』(コ

ンマ)を使用する。

本テーブルに ID:9、タイトル:’VBファン’、価格:4000、購入日:’2000/5/5’、カテゴリ ID:4、著者 ID:4のレコードを追加

例文2:INSERTΔINTOΔ本(タイトル,価格,購入日,カテゴリ ID, 著者 ID)ΔVALUES(’VB

ファン’,4000,’2000/5/5’,4,4);

解 説:特定のフィールドにデータを挿入し無い場合は、省略出来る。上記の例では、ID

フィールドを省略して居る。実行した後、データを見ると、IDフィールドには『0』

が代入されて居る。猶、文字列型のフィールドの場合は空白と成る。此の状態を

『NULL』と謂う。亦、オートナンバー型フィールドの場合は自動で番号が割り振

られる。

本テーブルに、タイトル:’VBファン’、価格:4000、購入日:’2000/5/5’、カテゴリ ID:4、著者 ID:4のレコードを追加する

UPDATE 文の解説

データ内容を変更する構文

UPDATE△テーブル名ΔSETΔフィールド名=変更する数値データ,フィールド名=’変更する文字列データ’ΔWHEREΔ変更するデータの条件

例文1:UPDATEΔ本ΔSETΔ価格=8000,購入日=’2000/6/5’ΔWHEREΔタイトル=’VB ファン’ ;

解 説:総てのデータを変更したい場合は WHERE は必要無いが、特定のレコードを変更

したい場合は指定する。

本テーブルのタイトルフィールドが’VBファン’と謂うレコードの価格を 8000に、購入日を’2000/6/5’に変更する

SQL 文で文字列を記述する場合は、シングルクオーテーション( ' )で囲む。

機 能

書 式

解 説

機 能

書 式

解 説

機 能

書 式

解 説