ADO プログラミング モデルの主な要素を次に示します。
接続
アプリケーションからデータ ソースを利用するときは、データ交換に必要な環境である "接続" を通してアクセスします。アプリケーションからデータ ソースに直接アクセスしたり (2 層システム)、Microsoft Internet Information Services (IIS) などを中継して間接的にアクセスする (3層システム) ことができます。
オブジェクト モデルでは、接続の概念を Connection オブジェクトで表しています。
"トランザクション" は、接続を通して発生する一連のデータ アクセス操作の開始から終了までの範囲を示します。ADO では、トランザクションの操作によるデータ ソースの変更が、すべて正常に実行されるか、まったく実行されないかのどちらかになります。
トランザクションをキャンセルした場合、またはトランザクションの操作の 1 つが正常に実行されなかった場合は、そのトランザクションの操作をまったく実行しなかった場合と同じ結果になります。この場合のデータ ソースは、トランザクションの開始前と同じ状態になります。
オブジェクト モデルでは、トランザクションの概念を明示的に表すのではなく、Connection オブジェクトのメソッドのセットを使って表します。
ADO では、OLE DB プロバイダからデータおよびサービスにアクセスします。Connection オブジェクトは、特定のプロバイダおよびパラメータを指定するために使用されます。たとえば、Remote Data Service (RDS) を明示的または暗黙的に呼び出すには、Microsoft OLE DB Remoting Provider を使います。OLE DB Remoting Provider を通して RDS を呼び出す例については、「RDS チュートリアル」の手順 2 を参照してください。
接続するデータ ソースは、接続文字列または URL (Uniform Resource Locator) で指定します。
コマンド
確立された接続を通して "コマンド" が発行され、データ ソースに対する何らかの操作が行われます。通常は、コマンドを使って、データ ソースのデータの追加、削除、または更新を行ったり、テーブルの行の形式でデータを取得します。
オブジェクト モデルでは、コマンドの概念を Command オブジェクトで表しています。Command オブジェクトによって、ADO はコマンドの実行を最適化することができます。
パラメータ
多くの場合、コマンドは "パラメータ" を必要とします。パラメータは、コマンドの可変要素であり、コマンドを発行する前に変更できます。たとえば、データを取得するための同じコマンドを繰り返し発行する場合に、取得する情報の指定を毎回変更することができます。
パラメータは、特に、関数のような働きをするコマンドを実行する場合に役立ちます。この場合、何をするコマンドかということを知っていればよく、その動作内容を知る必要はありません。たとえば、口座間で金銭の移動を行う銀行送金のコマンドを発行するとします。この場合は、送金する金額をパラメータとして指定します。オブジェクト モデルでは、パラメータの概念を Parameter オブジェクトで表しています。
レコードセット
コマンドが、テーブル内の情報の行としてデータを返すクエリ (つまり、行を返すクエリ) の場合、返された行はローカルな記憶領域に格納されます。
オブジェクト モデルでは、この記憶領域を Recordset オブジェクトで表しています。
Recordset は、行のデータの検査や修正を行う主要な手段として使用されます。Recordset オブジェクトでは、次の操作を行うことができます。
フィールド
Recordset の行は、1 つ以上の "フィールド" で構成されます。Recordset を 2 次元のグリッドと考えた場合、フィールドの並びは "列" を構成します。各フィールド (列) は、属性として名前、データ型、および値を持ちます。この値に、データ ソースの実際のデータが格納されます。
オブジェクト モデルでは、フィールドを Field オブジェクトで表しています。
データ ソースのデータを変更するには、Recordset の行の Field オブジェクトの値を変更します。最終的には、Recordset の変更はデータ ソースに反映されます。必要に応じて、Connection オブジェクトのトランザクション管理メソッドで、すべての変更が成功するか、またはすべての変更が失敗するかを決定することができます。
エラー
アプリケーションでは、常にエラーが発生する可能性があります。通常は、接続の確立やコマンドの実行に失敗した場合、または初期化されていない Recordset オブジェクトを使用しようとしたときのように、適切な状態でオブジェクトの操作ができなかった場合の結果としてエラーが発生します。
オブジェクト モデルでは、エラーを Error オブジェクトで表しています。
エラーが発生すると、1 つ以上の Error オブジェクトが作成されます。次にエラーが発生すると、前の Error オブジェクトのセットは削除されます。
プロパティ
各 ADO オブジェクトは、そのオブジェクトの動作を説明または制御する一意の "プロパティ" のセットを持ちます。
プロパティには、組み込みプロパティとダイナミック プロパティの 2 種類があります。組み込みプロパティは、ADO オブジェクトの一部であり、常に使用可能です。ダイナミック プロパティは、基になるデータ プロバイダまたはサービス プロバイダによって ADO オブジェクトの Properties コレクションに追加され、そのプロバイダが使われている間のみ存在します。
オブジェクト モデルでは、プロパティを Property オブジェクトで表しています。
レコード
データ ソースは、すべてがデータベースのテーブルとして存在するとは限りません。ファイル システムや電子メール システムなどの情報記憶システムは、"コンテナ" および "コンテンツ" という要素で構成されます。コンテナには、コンテンツまたはサブコンテナが格納されます。
コンテナとコンテンツは、ファイル システムでは "ディレクトリ" と "ファイル"、電子メール システムでは "フォルダ" と "メッセージ" になります。
オブジェクト モデルでは、コンテナまたはコンテンツを Record オブジェクトで表しています。また、Recordset の行を Record オブジェクトで表すこともあります。
Record オブジェクトでは、次の操作を行うことができます。
Record オブジェクトは、Connection オブジェクト、Recordset オブジェクトなど、ほかの ADO オブジェクトと組み合わせて使われます。ただし、Record オブジェクトは、「基本的な ADO プログラミング モデル」に示された ADO オブジェクトとは異なる問題を解決するために設計されています。詳細については、「Record オブジェクトと Stream オブジェクト」を参照してください。
ストリーム
ファイル システムの "ファイル" など、情報記憶システムの "コンテンツ" は、バイトのストリームで構成されます。"メモリ" のバッファも、バイトのストリームで構成されます。
オブジェクト モデルでは、バイトのストリームを Stream オブジェクトで表しています。
Stream オブジェクトでは、次の操作を行うことができます。
Stream オブジェクトは、必ず、Record オブジェクトと組み合わせて使用されます。Stream オブジェクトは、「基本的な ADO プログラミング モデル」に示されている ADO オブジェクトとは異なる問題を解決するために設計されています。詳細については、「Record オブジェクトと Stream オブジェクト」を参照してください。
コレクション
ADO のオブジェクトの種類の 1 つに、特定の種類の別のオブジェクトを格納するための "コレクション" があります。コレクションに含まれるオブジェクトは、コレクションのプロパティを使って、名前 (テキスト文字列) または順序番号 (整数) によって取得できます。
ADO には、次の 4 種類のコレクションがあります。
ADO オブジェクトは、整数型 (Integer)、文字列型 (String)、ブール型 (Boolean) などの共通データ型の値を設定または取得するプロパティを持ちます。ただし、特定のプロパティについては、"コレクション オブジェクト" というデータ型の値を返すと考えると便利です。コレクション オブジェクトにも、そのコレクションに適したほかのオブジェクトの格納および取得を行うためのメソッドがあります。
たとえば、Recordset オブジェクトは、コレクション オブジェクトを返す Properties プロパティを持っていると考えることができます。コレクション オブジェクトには、その Recordset の属性を記述する Property オブジェクトの格納および取得を行うためのメソッドがあります。
イベント
"イベント" は、ある操作がこれから起こること、または既に起こったことを通知します。イベントを使用すると、複数の非同期処理で構成されるアプリケーションを効率的に作成することができます。
オブジェクト モデルでは、イベントを明示的に表すのではなく、イベント ハンドラ ルーチンの呼び出しとして表します。
操作を開始する前に呼び出されるイベント ハンドラでは、操作パラメータを検査または変更したり、その操作を取り消すかまたは実行するかを指定することができます。
操作が完了した後に呼び出されるイベント ハンドラは、非同期の操作が完了すると、そのことを通知します。一部の操作は、オプションとして、非同期処理を実行できるように拡張されています。たとえば、アプリケーションで Recordset.Open の非同期操作を開始し、操作の終了時に実行完了イベントによる通知を受けることができます。
イベントの詳細については、「ADO イベント モデルと同期および非同期処理」を参照してください。