ADO.NET での OpenESQL の使用方法

Visual COBOL では、OpenESQL プリプロセッサによって ADO.NET のデータプロバイダ経由でデータソースにアクセスできます。 OpenESQL プリプロセッサと ODBC ドライバを使用する方法については、『データベースアクセス』フォルダの『OpenESQL』を参照してください。

この章は、次の各項で構成されています。

ADO.NET のデータプロバイダとデータソース名

ADO.NET を利用するには、あらかじめ次の作業を行う必要があります。

  1. ADO.NET データプロバイダのインストール
  2. OpenESQL アシスタント経由での ADO.NET DSN (Data Source Name; データソース名) の設定

ADO.NET データソース名の設定

詳細は、『OpenESQL アシスタント』の章を参照してください。

ADO.NET データプロバイダのサポート

OpenESQL は ADO.NET データプロバイダをサポートしています。 OpenESQL で ADO.NET データプロバイダを使用するには、次のコンパイラ指令を使用する必要があります。

dbman=ado

このコンパイラ指令を指定すると、EXEC SQL 文が CONNECT 文で指定された ADO.NET データプロバイダと通信できるようになります。

OpenESQL では、EXEC ADO 文を使用して ADO.NET オブジェクトを作成および操作することもできます。 詳細については、後述する『埋め込み EXEC ADO 文』を参照してください。

EXEC SQL 文で dbman=ado を使用するときには、次の OpenESQL 機能が現在はサポートされていないことに留意してください。

ストアドプロシージャの呼び出しは可能ですが、 呼び出しの際には次の各項目が現在はサポートされていないことに留意してください。

注:

  • PREPARE 文、EXECUTE 文、および EXECUTE IMMEDIATE 文を使用する動的 SQL と、PREPARE 文で定義された文を使用するカーソルを使用する動的 SQL はサポートされます。ただし、EXECUTE 文と OPEN 文でホスト変数が指定されている場合のみです。
  • SQLDA は使用できません。

SQL コンパイラ指令

プログラムのコンパイル時には、SQL コンパイラ指令と適切なオプションを指定する必要があります。これらを指定すれば、埋め込み SQL 文がプリプロセッサによって対応するデータソースの関数呼び出しに変換されます。プログラムから呼び出す ADO.NET データプロバイダの種類は、アクセスするデータソースによって異なります。

SQL コンパイラ指令のオプションを指定するには、プログラム内で $SET 文を使用します。次に使用例を示します。

$set sql(dbman=ado)

ODBC と ADO.NET データソースの双方に共通の SQL コンパイラ指令のオプションを次に一覧します。

オプション 説明
[NO]ANSI92ENTRY OpenESQL を SQL ANSI 92 エントリレベル規格に準拠させます。
[NO]AUTOCOMMIT 各 SQL 文を個別のトランザクションとして処理し、実行後ただちにコミットします。このオプションを設定せずに、トランザクションに対応した ODBC ドライバを使用する場合は、文をトランザクションの一部として明示的にコミット (またはロールバック) する必要があります。
CHECKDUPCURSOR プログラムを NOANSI92ENtrY 指令でコンパイルするときに、すでにカーソルが開いている場合、OpenESQL が SQLCODE -19516 を返します。NOANSI92ENtrY 指令でのコンパイルのデフォルト動作では、開いているカーソルがいったん閉じられ、自動的に開かれます。
CHECKSINGLETON 実行時にシングルトンの SELECT が複数行を返すかどうか OpenESQL でチェックします。複数行が返される場合、OpenESQL は SQLCODE を -811 に設定します。
DBMAN=preprocessor 使用するプリプロセッサを指定します。ODBC ドライバの場合、この値は常に odbc に設定します (dbman=odbc)。 ADO.NET データプロバイダの場合、この値は常に ado に設定します (dbman=ado)。 OpenESQL を使用するプログラムのコンパイルでは、デフォルトで dbman=odbc が設定されるため、このオプションを指定する必要はありません。
[NO]ESQLVERSION OpenESQL の構文レベルを設定します。
[NO]NIST OpenESQL の動作を NIST による SQL ANSI 92 エントリレベル規格に準拠させます。
[NO]TARGEtdB=[MSQLSERVER | ORACLEOCI | ORACLE | INFORMIX | SYBASE | DB2 | ORACLE7] 特定のデータソース用にパフォーマンスを最適化する場合や、アプリケーションで ODBC を呼び出すかわりに ORACLE OCI を使用してデータベース呼び出しを生成する場合に、この指令を設定します。

SQL コンパイラ指令の ODBC 専用オプションについては、『データベースアクセス』フォルダの『OpenESQL』を参照してください。

データベース接続

プログラムからデータベース内のデータにアクセスするには、事前にデータベースへの接続を確立する必要があります。

プログラムからデータベースへの接続には、必ず次の方法を使用してください。

注:ADO.NET データプロバイダに対する暗黙的な接続と切断、およびロールバックは、現在サポートされていません。

サンプルプロジェクト

Visual COBOL には、ADO.NET のさまざまなサンプルプロジェクトが付属しています。サンプルプロジェクトは、Visual COBOL のベースインストールディレクトリ内の Examples¥Visual Studio Integration ディレクトリにあります。

サンプルプロジェクトを使用するには、サンプル用のデータソースをセットアップする必要があります。 このセットアップには、OpenESQL Assistant Connection Editor を使用します。詳細は、『OpenESQL アシスタント』の章を参照してください。

OpenESQL の各サンプルプロジェクトは、処理の進行状況 (およびクエリー結果) を示すコンソールログを生成します。また、エラーが発生した場合は、エラーメッセージを表示して終了します。

データ型

使用するデータ型は、『データベースアクセスガイド』の『データ型』の章に記載されている SQL データ型に限定することをお奨めします。

:ADO.NET を使用して日時データを COBOL PIC X フィールドとして扱う場合は、上記を守ることが特に重要になります。

XML サポート

XML サポートの実装は、ADO.NET データプロバイダごとに異なります。 詳細については、後述する『埋め込み EXEC ADO 文の使用方法』を参照してください。

埋め込み EXEC ADO 文の使用方法

OpenESQL で EXEC ADO 文を使用すれば、より多くの ADO.NET データプロバイダに対応できます。 EXEC ADO 文は EXEC SQL 文と同じく、COBOL プログラム内に埋め込むことができます。 埋め込み EXEC ADO 文によって、次の操作が可能になります。

EXEC ADO 文には、次の 4 つの種類があります。

個々の文の詳細については、Visual Studio オンラインヘルプの『埋め込み ADO 文』を参照してください。

非接続モデル文

非接続モデル文を使用すれば、COBOL プログラム内で ADO.NET オブジェクトを定義、作成、および操作できます。 主な用途は次のとおりです。

具体的な非接続モデル文は次のとおりです。

接続モデル文

接続モデル文は、データソースの操作に使用します。FILL コマンドでデータソースからデータを取り込み、DataSet 内の DataTable に格納します。UPDATE コマンドは、DML (Data Manipulation Language; データ操作言語)、つまり INSERT や UPDATE、DELETE による変更を、データ ソースに確実に反映させます。

具体的な接続モデル文は次のとおりです。

ADO.NET カーソル文

ADO.NET カーソル文は、ADO.NET の DataRows カーソルの定義、作成、および操作に使用します。 ADO.NET カーソル文は SQL カーソル文に似ていますが、ADO.NET DataRows カーソルではデータソース内のテーブルではなく、DataSet 内の DataTable が選択基準になります。

具体的な ADO.NET カーソル文は次のとおりです。

ADO.NET オブジェクト共有文

ADO.NET オブジェクト共有文は、COBOL プログラムと他の .NET アプリケーション間で、ADO.NET オブジェクト (Connection、DataSet、DataReader) を共有するために使用します。 一連の GET 文は、(dbman=ado の場合に) OpenESQL が EXEC SQL コマンド用に生成したオブジェクトを取り込みます。 BIND 文は COBOL プログラムから他の .NET アプリケーションで生成された ADO.NET オブジェクトにアクセスするとき、UNBIND 文は BIND 文でアクセスしたオブジェクトと COBOL プログラムとの関連付けを解除するときに、それぞれ使用します。

具体的な ADO.NET オブジェクト共有文は次のとおりです。