マネージ コード内の .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