マネージ コード内の .NET ホスト変数

OpenESQL には、マネージ アプリケーション用として、従来のホスト変数宣言を使用するオプションと .NET データ タイプをホスト変数宣言として使用するオプションがあります。.NET データ タイプの使用は、OpenESQL Managed Runtime で可能になり、DBMAN 指令オプションを ADO に設定することで指定されます。

マネージ アプリケーションに PIC 句を使用する従来のホスト変数宣言が含まれている場合、OpenESQL Managed Runtime は各 PIC 句を読み取って、それを対応する .NET タイプに変換する必要があります。ただし、PIC 句の代わりに .NET データ タイプを使用するホスト変数を宣言すると、次のような利点が得られます。
  • パフォーマンスの改善 - OpenESQL Managed Runtime が PIC 句を .NET タイプに変換する必要がないため、パフォーマンスが大幅に向上します。
  • サイズ制限なし - マネージ アプリケーションの .NET 変数のサイズに制限はありませんが、ネイティブ COBOL アプリケーション (特に LOB データが含まれるアプリケーション) のホスト変数のサイズは制限されます。
  • アプリケーション移植性の改善 - マネージ ランタイムにより、既存のネイティブ EXEC SQL アプリケーションを .NET に移植するプロセスが簡素化されます。
.NET ホスト変数を使用するようにアプリケーションをコーディングする際には、次のことに注意してください。
  • .NET ホスト変数を 01 レベルで定義する必要があります。そうしないとコンパイラ エラーが発生します。
  • 共通の .NET データ タイプの構文を省略名で定義できます。たとえば、System.String は次のように簡単に定義できます。
    01 myName string.
  • 他の .NET 変数の構文では、通常、TYPE 句がインクルードされます。次に例を示します。
    01 myDate type System.DateTime.
  • ベンダーで提供される SQL データ タイプに特定の .NET タイプが存在しない場合、OBJECT をホスト変数タイプとして使用できます。次に例を示します。
    01 myData object.
注:
  • .NET ホスト変数の使用をサポートするのは、OpenESQL プリプロセッサのみです。現在、.NET アプリケーションで EXEC SQL 構文を直接サポートしている DBMS ベンダーはありません。
  • OpenESQL Managed Runtime の .NET ホスト変数の宣言については、参照トピック「SQLデータ型」を参照してください。
  • OpenESQL アシスタントを使用すると、ツールの DCLGEN オプションを使用してテーブルの .NET ホスト変数を簡単に生成できます。この形式でコピーブックを生成する方法の詳細については、「OpenESQL アシスタント」を参照してください。

例:.NET ホスト変数の定義

  *> -------------------------------------------
       *> COBOL HOST VARIABLES FOR TABLE EMP
       *> -------------------------------------------
       01  EMP-EMPNO                          STRING.
       01  EMP-FIRSTNME                       STRING.
       01  EMP-MIDINIT                        STRING.
       01  EMP-LASTNAME                       STRING.
       01  EMP-WORKDEPT                       STRING.
       01  EMP-PHONENO                        STRING.
       01  EMP-HIREDATE                       type System.DateTime.
       01  EMP-JOB                            STRING.
       01  EMP-EDLEVEL                        BINARY-SHORT.
       01  EMP-SEX                            STRING.
       01  EMP-BIRTHDATE                      type System.DateTime.
       01  EMP-SALARY                         DECIMAL.
       01  EMP-BONUS                          DECIMAL.
       01  EMP-COMM                           DECIMAL.


EXEC SQL 
 SELECT 
        A.FIRSTNME
       ,A.LASTNAME
       ,A.HIREDATE
       ,A.SALARY
       ,A.EMPNO
INTO 
        :EMP-FIRSTNME
       ,:EMP-LASTNAME
       ,:EMP-HIREDATE:EMP-HIREDATE-NULL
       ,:EMP-SALARY:EMP-SALARY-NULL
       ,:EMP-EMPNO
   FROM HCOSQL.EMP A
  WHERE (A.EMPNO = :EMP-EMPNO)
END-EXEC