ODBC、JDBC、または ADO.NET ステートメントを含むインライン コード ステートメントの追加

このセクションでは、アプリケーション開発者がインライン コード ステートメントを含むアクション図を作成する方法について説明します。また、ODBC/JDBC/ADO.NET ステートメントを使用したインライン コード ステートメントの作成についても説明します。
gen86
インライン コード ステートメントを使用すると、ターゲット固有のソース コードをアクション図内にインラインで組み込み、モデルに格納できます。モデル外の外部アクション・ブロック(EAB)コードを管理する代わりに、そのコードをインライン・コード・ステートメントに追加します。このステートメントは、コードがモデル内に格納されることを保証します。インライン・コード・ステートメントでは、C や COBOL などのネイティブ・ターゲット言語でカスタム・コードを追加できます。データベースに固有の SQL ステートメントや一般的な SQL ステートメントを追加します。
このセクションでは、ODBC/JDBC/ADO.NET ステートメントを対象とするインライン コード ステートメントを追加するために役立つヒントとベスト プラクティスについて説明しますが、考えられるすべてのシナリオが記載されているわけではありません。

[Inline Code]ダイアログ・ボックスを開く

[Inline Code]ダイアログ・ボックスを使用して、インライン・コード・ステートメントをアクション図に追加できます。
アクション図にインライン コード ステートメントを追加するには、以下の手順を実行します。
  1. [分析]
    または
    [設計]
    -
    [アクション図]
    をクリックします。
    [アクション図名]ダイアログ ボックスが表示されます。
  2. [プロセス]、[プロシージャ・ステップ]、または[アクション・ブロック]のリストから項目を選択し、
    [了解]
    をクリックします。
    [アクション図]ウィンドウが開き、選択した項目が表示されます。
  3. 後ろにステートメントを追加するステートメントを選択します。
  4. [編集]
    -
    [ステートメントの追加]
    -
    [Inline Code]
    をクリックします。
    [インライン・コード]ダイアログ・ボックスが開きます。
ここでは、ODBC/JDBC/ADO.NET コードのさまざまなセクションを指定するフィールドについての推奨事項を説明します。

ODBC/JDBC/ADO.NET を含むインライン・コード・ステートメント

インライン・コード・ステートメントを使用すると、ODBC/JDBC/ADO.NET ステートメントを含むカスタム・コードまたは SQL ステートメントをアクション図に追加できます。SQL ステートメントのみを含むステートメントは、データベース・プリコンパイラが SQL を言語依存のソース・コードに変換するので、簡単に作成できます。ODBC/JDBC/ADO.NET コードはターゲット・ソース言語で直接記述されるため、SQL 文だけでなく、さらにコーディングが必要です。
以下のスキーマを使用するエンティティ EMPLOYEE に対して CRUD 操作を実行するシナリオを考えてみます。
Entity EMPLOYEE Attribute NUMBER number(6) primary key Attribute NAME text(30) Attribute WORK_PHONE text(16) optional

変数の宣言

以下の項目は、変数のタイプを示します。
  • データ アクセスに固有の変数
  • Host variables
  1. データ・アクセスに固有の変数を宣言します。
    これらの変数によって、ODBC/JDBC ステートメントの実行が容易になります。インライン・コード・ステートメントの[グローバル変数の宣言]セクションを使用します。
    [グローバル変数の宣言]フィールドに、アクション図でグローバルに使用されるすべての変数を指定します。複数のインライン・コード・ステートメントで変数を使用します。
    • C/ODBC
    /* To execute SQL (INSERT) query */ static TIHSTMT create_stmt = {SQL_NULL_HSTMT, NULL}; static RETCODE ret_code = 0; /* To execute SQL (SELECT) query*/ static TIHSTMT read_stmt = {SQL_NULL_HSTMT, NULL}; static RETCODE ret_code = 0; /* To execute SQL (UPDATE) query*/ static TIHSTMT update_stmt = {SQL_NULL_HSTMT, NULL}; static RETCODE ret_code = 0;
    • C#/ADO.NET
    /* To execute SQL (INSERT) query */ IAbstractCommand create_cmd; IAbstractResultSet create_rs; Exception sql_ex = null; /* To execute SQL (SELECT) query*/ IAbstractCommand read_cmd; IAbstractResultSet read_rs; Exception sql_ex = null; /* To execute SQL (UPDATE) query*/ IAbstractCommand update_cmd; IAbstractResultSet update_rs; Exception sql_ex = null;
    • JAVA/JDBC
    /* To execute SQL (INSERT) query */ PreparedStatement create_cmd; ResultSet create_rs; Exception sql_ex = null; /* To execute SQL (SELECT) query */ PreparedStatement read_cmd; ResultSet read_rs; Exception sql_ex = null; /* To execute SQL (UPDATE) query */ PreparedStatement update_cmd; ResultSet update_rs; Exception sql_ex = null;
  2. ホスト変数を宣言します。これらの変数を使用して、SQL ステートメントの作成中に列またはパラメータのいずれかをバインドします。
    ODBC/ADO.NET/JDBC SQL 宣言を処理するためにプリコンパイルは必要ないため、インライン・コード・ステートメントのいずれかの宣言セクションを使用します。[SQL宣言]フィールドでは、任意のホスト変数を指定できます。特に、埋め込み SQL ステートメントを含むインライン・コード・ステートメントでは、ホスト変数が使用されます。これらの変数は、生成されたコードの EXEC SQL DECLARE セクションに含まれるように、別々に収集されます。これらの変数と SQL ステートメントを一緒に使用して、データベースから情報を取得したり、データベースに情報を追加したりします。このフィールドを有効にするには、ダイアログ ボックスで[SQL]オプションを選択します。
    アクション図でエンティティ・アクション・ビューが定義されている場合、インライン・コード・ステートメントは、それらのビューに対して生成されたホスト変数にアクセスできません。
    • C/ODBC
    static SDWORD hv_number; static UCHAR FAR hv_name[31]; static UCHAR FAR hv_work_phone[17]; static SQLLEN hvind_work_phone;
    • C#/ADO.NET
    int hv_number; string hv_name; string hv_work_phone; bool hvind_work_phone;
    • JAVA/JDBC
    int hv_number; String hv_name; String hv_work_phone; boolean hvind_work_phone;
    使用可能な GEN タイプに対応するホスト変数を宣言するために、以下のネイティブ・データ・タイプを使用します。
    • C/ODBC
    Gen データ・タイプ
    ネイティブ・データ・タイプ
    TEXT
    static UCHAR FAR[]
    NUMBER
    (精度が有効)
    static UCHAR FAR[]
    DATE
    static DATE_STRUCT
    TIME
    static TIMESTAMP_STRUCT
    TIMESTAMP
    static TIMESTAMP_STRUCT
    BLOB
    <none>
    • C#/ADO.NET
    Gen データ・タイプ
    ネイティブ・データ・タイプ
    TEXT
    文字列
    NUMBER
    short
    int
    double
    NUMBER
    (精度が有効)
    decimal
    DATE
    DateTime
    TIME
    DateTime
    TIMESTAMP
    DateTime
    BLOB
    byte[]
    • JAVA/JDBC
    Gen データ・タイプ
    ネイティブ・データ・タイプ
    TEXT
    文字列
    NUMBER
    short
    int
    double
    NUMBER (精度が有効)
    BigDecimal
    DATE
    java.sql.Date
    TIME
    java.sql.Time
    TIMESTAMP
    java.sql.Timestamp
    BLOB
    byte[]

ODBC/JDBC ステートメントの作成

この手順では、ODBC/JDBC ステートメントを作成する方法について説明します。
ODBC/JDBC ステートメントを作成するには、以下の手順に従います。
  1. ステートメント・ハンドルまたはオブジェクトを SQL クエリ文字列で初期化します。この初期化は、インライン・コード・ステートメントの[コード]セクションで行われます。
    • C/ODBC
    /* To execute SQL (INSERT) query */ ret_code = TiodbcAllocStmt(&create_stmt, “create_employee”, FALSE); ret_code = TiodbcPrepare(&create_stmt, “INSERT INTO `EMPLOYEE` (`NUMBER`,`NAME`, `WORK_PHONE`) VALUES (?, ?, ?)”); /* To execute SQL (SELECT) query */ ret_code = TiodbcAllocStmt(&read_stmt, “read_employee”, FALSE); ret_code = TiodbcPrepare(&read_stmt, “SELECT `NUMBER`, `NAME`, `WORK_PHONE` FROM `EMPLOYEE` WHERE `NUMBER` = ? FOR UPDATE OF `WORK_PHONE`”); /* To execute SQL (UPDATE) query */ ret_code = TiodbcAllocStmt(&update_stmt, “update_employee”, FALSE); ret_code = TiodbcPrepare(&update_stmt, “UPDATE `EMPLOYEE` SET `WORK_PHONE` = ? WHERE `NUMBER` = ?”);
    • C#/ADO.NET
    /* To execute SQL (INSERT) query */ create_cmd = Globdata.GetDBMSData().GetDBMSManager().GetCommand(Globdata, IefRuntimeParm2, “IEFDB”, “INSERT INTO `CUSTOMER` (`NUMBER`, `NAME`, `WORK_PHONE`) VALUES (?, ?, ?)”); /* To execute SQL (SELECT) query */ read_cmd = Globdata.GetDBMSData().GetDBMSManager().GetCommand(Globdata, IefRuntimeParm2, “IEFDB”, “SELECT `NUMBER`, `NAME`, `WORK_PHONE` FROM `EMPLOYEE` WHERE `NUMBER` = ? FOR UPDATE OF `WORK_PHONE`”); /* To execute SQL (UPDATE) query */ update_cmd = Globdata.GetDBMSData().GetDBMSManager().GetCommand(Globdata, IefRuntimeParm2, “IEFDB”, “UPDATE `EMPLOYEE` SET `WORK_PHONE` = ? WHERE `NUMBER` = ?”);
    文字列リテラル "IEFDB" はデータ ソース名を指します。
    • JAVA/JDBC
    /* To execute SQL (INSERT) query */ create_cmd = globdata.getDBMSData().getDBMSManager().getStatement(globdata, iefRuntimeParm2, “IEFDB”, “INSERT INTO `CUSTOMER` (`NUMBER`, `NAME`, `WORK_PHONE`) VALUES (?, ?, ?)”); /* To execute SQL (SELECT) query */ read_cmd = globdata.getDBMSData().getDBMSManager().getStatement(globdata, iefRuntimeParm2, “IEFDB”, “SELECT `NUMBER`, `NAME`, `WORK_PHONE` FROM `EMPLOYEE` WHERE `NUMBER` = ? FOR UPDATE OF `WORK_PHONE`”); /* To execute SQL (UPDATE) query */ update_cmd = globdata.getDBMSData().getDBMSManager().getStatement(globdata, iefRuntimeParm2, “IEFDB”, “UPDATE `EMPLOYEE` SET `WORK_PHONE` = ? WHERE `NUMBER` = ?”);
    文字列リテラル "IEFDB" はデータ ソース名を指します。
    ホスト変数を使用した列またはパラメータのバインドは、データ・ソースとアプリケーションの間でデータを交換する方法の 1 つです。SQL ステートメントが実行されると、バインドされたパラメータが読み取られて、バインドされた列が取得されます。アプリケーションは、ホスト変数の読み取りや書き込みを管理する必要があります。場合によっては、複数のホスト変数のセットが必要になることもあります(たとえば、SELECT + UPDATE)。
    ホスト変数を使用した SELECT SQL ステートメント内の列のバインドは、C/ODBC のみに適用されます。結果セットを使用して、C#/ADO.NET および Java/JDBC のデータを取得します。
    • C/ODBC
    既知のホスト変数で列をバインドするには、SQLBindCol ODBC API を使用します。詳細については、ODBC API に関する MSDN のドキュメントを参照してください。
    /* To execute SQL (SELECT) query */ ret_code = SQLBindCol(read_stmt.hstmt, 1, SQL_C_SLONG, &hv_number, sizeof(hv_number), &cbData); ret_code = SQLBindCol(read_stmt.hstmt, 2, SQL_C_CHAR, &hv_name, sizeof(hv_name), &cbData); ret_code = SQLBindCol(read_stmt.hstmt, 3, SQL_C_CHAR, &hv_work_phone, sizeof(hv_work_phone), &hvind_work_phone);
    列の索引は 1 から開始します。INSERT/UPDATE/DELETE などの非クエリ SQL ステートメントでは、列をバインドする必要はありません。
    注:
     さまざまな Gen データ・タイプでの SQL C タイプについては、「データ・タイプ情報」の表 1 を参照してください。
  2. 存在する場合は、ホスト変数を使用してパラメータをバインドします。すべてのタイプの SQL ステートメントには、パラメータのバインドが必要です。
    • C/ODBC
    /* To execute SQL (INSERT) query */ ret_code = TiodbcParameter(&create_stmt, 1, “”, “EMPLOYEE”, “NUMBER”); ret_code = SQLBindParameter(create_stmt.hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, info->sqlType, info->precision, info->scale, &hv_number, sizeof(hv_number), NULL); ret_code = TiodbcParameter(&create_stmt, 2, “”, “EMPLOYEE”, “NAME”); ret_code = SQLBindParameter(create_stmt.hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, info->sqlType, sizeof(hv_name)-1, info->scale, hv_name, sizeof(hv_name), NULL); ret_code = TiodbcParameter(&create_stmt, 3, “”, “EMPLOYEE”, “WORK_PHONE”); ret_code = SQLBindParameter(create_stmt.hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, info->sqlType, sizeof(hv_work_phone)-1, info->scale, hv_work_phone, sizeof(hv_work_phone), NULL); /* To execute SQL (SELECT) query */ ret_code = TiodbcParameter(&read_stmt, 1, “”, “EMPLOYEE”, “NUMBER”); ret_code = SQLBindParameter(read_stmt.hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, info->sqlType, info->precision, info->scale, &hv_number, sizeof(hv_number), NULL); /* To execute SQL (UPDATE) query */ ret_code = TiodbcParameter(&update_stmt, 1, “”, “EMPLOYEE”, “WORK_PHONE”); ret_code = SQLBindParameter(update_stmt.hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, info->sqlType, sizeof(hv_work_phone)-1, info->scale, hv_work_phone, sizeof(hv_work_phone), NULL); ret_code = TiodbcParameter(&update_stmt, 2, “”, “EMPLOYEE”, “NUMBER”); ret_code = SQLBindParameter(update_stmt.hstmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, info->sqlType, info->precision, info->scale, &hv_number, sizeof(hv_number), NULL);
    パラメータの索引は 1 から開始します。列とパラメータのインデックスは、互いに独立しています。必要に応じて、TiodbcParameter API の 3 番目のパラメータで DB 物理テーブルの OWNER を指定します。
    さまざまな Gen データ タイプでの SQL C タイプについては、「データ タイプ情報」の表 1 を参照してください。
    • C#/ADO.NET
    /* To execute SQL (INSERT) query */ create_cmd.InsertParameter(); create_cmd.BindParameter(0, hv_number); create_cmd.InsertParameter(); create_cmd.BindParameter(1, hv_name); create_cmd.InsertParameter(); create_cmd.BindParameter(2, hv_work_phone); /* To execute SQL (SELECT) query */ read_cmd.InsertParameter(); read_cmd.BindParameter(0, hv_number); /* To execute SQL (UPDATE) query */ update_cmd.InsertParameter(); update_cmd.BindParameter(0, hv_work_phone); update_cmd.InsertParameter(); update_cmd.BindParameter(1, hv_number);
    パラメータの索引は 0 から開始します。さまざまな Gen データ タイプでのバインド メソッドについては、「データ タイプ情報」の表 2 を参照してください。
    • JAVA/JDBC
    /* To execute SQL (INSERT) query */ create_cmd.setInt(1, hv_number); create_cmd.setString(2, hv_name); create_cmd.setString(3, hv_work_phone); /* To execute SQL (SELECT) query */ read_cmd.setInt(1, hv_number); /* To execute SQL (UPDATE) query */ update_cmd.setString(1, hv_work_phone); update_cmd.setInt(2, hv_number);
    パラメータの索引は 1 から開始します。さまざまな Gen データ タイプでのバインド メソッドについては、「データ タイプ情報」の表 3 を参照してください。

SQL ステートメントの実行

SQL ステートメントを実行するためのコードを入力できるようになりました。
SQL ステートメントを実行するためのコードを入力するには、以下の手順を実行します。
  1. SQL ステートメントを実行し、結果セットが存在する場合は取得します。このために、インライン・コード・ステートメントの[コード]セクションを使用します。
    • C/ODBC
    /* To execute SQL (INSERT) query */ ret_code = SQLExecute(create_stmt.hstmt); ret_code = SQLRowCount(create_stmt.hstmt, &create_count); /* To execute SQL (SELECT) query */ ret_code = SQLExecute(read_stmt.hstmt); /* To execute SQL (UPDATE) query */ ret_code = SQLExecute(update_stmt.hstmt); ret_code = SQLRowCount(update_stmt.hstmt, &update_count);
    • C#/ADO.NET
    /* To execute SQL (INSERT) query */ try { … create_count = create_cmd.ExecuteNonQuery(); … } catch (Exception ex) { sql_ex = ex; } /* To execute SQL (SELECT) query */ try { … read_rs = read_cmd.ExecuteQuery(); … } catch (Exception ex) { sql_ex = ex; } /* To execute SQL (UPDATE) query */ try { … update_count = update_cmd.ExecuteNonQuery(); … } catch (Exception ex) { sql_ex = ex; }
    • JAVA/JDBC
    /* To execute SQL (INSERT) query */ try { … create_cmd.execute(); create_count = hstmt_cmd.getUpdateCount(); … } catch (Exception ex) { sql_ex = ex; } /* To execute SQL (SELECT) query */ try { … read_cmd.execute(); read_rs = hstmt_cmd.getResultSet(); … } catch (Exception ex) { sql_ex = ex; } /* To execute SQL (UPDATE) query */ try { … update_cmd.execute(); update_count = hstmt_cmd.getUpdateCount(); … } catch (Exception ex) { sql_ex = ex; }
  2. 生成されたすべての TIR または SQL ODBC API からのリターン・コードを確認します。try/catch ブロックを使用して、C#/ADO.NET および JAVA/JDBC の両方で SQL 例外を検出し、さらにエラー処理を行います。
    以下の述語は、SQL エラーの検出に役立つ可能性があります。
    • 正常に実行された場合
      • C/ODBC
      ODBC_SUCCESSFUL(ret_code) Globdata.GetDBMSData().GetDBMSManager().WasSuccessful(sql_ex) globdata.getDBMSData().getDBMSManager().wasSuccessful(sql_ex)
      • C#/ADO.NET
      • JAVA/JDBC
    • SELECT/UPDATE/DELETE SQL ステートメントの実行時にデータが見つからない場合
      • C/ODBC
      ODBC_NOT_FOUND(ret_code) Globdata.GetDBMSData().GetDBMSManager().WasNoDataFound(sql_ex) globdata.getDBMSData().getDBMSManager().wasNoDataFound(sql_ex)
      • C#/ADO.NET
      • JAVA/JDBC
    • INSERT で重複データが見つかった場合
      • C/ODBC
      TiodbcDuplicate(&create_hstmt) Globdata.GetDBMSData().GetDBMSManager().WasDuplicateFound(IefRuntimeParm2, “IEFDB”, sql_ex) globdata.getDBMSData().getDBMSManager().wasDuplicateFound(“IEFDB”, sql_ex)
      • C#/ADO.NET
      • JAVA/JDBC
  3. アクション・ブロック実行時のグローバル・データを使用して呼び出し元にエラー情報を伝達し、アプリケーションがエラーを認識できるようにします。
    • C/ODBC
    strcpy(globdata->psmgr_dasg_data.status_flag, fatal_error); strcpy(globdata->psmgr_dasg_data.last_status, db_error); TiodbcError(&create_stmt); longjmp(excp_jumpbuf, TRACE_EXCEPTION);
    • C#/ADO.NET
    Globdata.GetErrorData().SetStatus(ErrorData.LastStatusFatalError); Globdata.GetErrorData().SetLastStatus(ErrorData.LastStatusDbError); Globdata.GetErrorData().SetErrorMessage(sql_ex); throw new ABException();
    • JVM/JDBC
    globdata.getErrorData().setStatus(ErrorData.FATAL_ERROR_FL_LS); globdata.getErrorData().setLastStatus(ErrorData.DB_ERROR_FL_LS); globdata.getErrorData().setErrorMessage(sql_ex); throw new ABException();

データの取得

インライン・コード・ステートメントの[コード]セクションを使用して、データを取得するステートメントを入力します。データの取得は、SELECT SQL ステートメントのみに適用されます。
C/ODBC
SQLFetch ODBC API は行を取得し、バインドされたすべての列のデータを返します。
/* To execute SQL (SELECT) query */ ret_code = SQLFetch(read_stmt.hstmt);
これで、ホスト変数の読み取り準備が整いました。インジケータ変数を使用して、NULLABLE 列のデータ可用性を確認します。インジケータ値 -1 は NULL、つまり、対応する列の値がないことを表します。
C#/ADO.NET
結果セット内のデータを読み取る前に、行にカーソル位置を配置します。
/* To execute SQL (SELECT) query */ if (hstmt_rs.MoveNext()) { hv_number = Globdata.GetDBMSData().GetDBMSManager().GetInt32( IefRuntimeParm2, "IEFDB", read_rs.GetValue(0)); hv_name = Globdata.GetDBMSData().GetDBMSManager().GetString( IefRuntimeParm2, "IEFDB", read_rs.GetValue(1)); hv_work_phone = Globdata.GetDBMSData().GetDBMSManager().GetString( IefRuntimeParm2, "IEFDB", read_rs.GetValue(2)); hvind_work_phone = read_rs.IsNull(2); }
データ・タイプに応じて、列データを読み取るために適切なメソッドを選択します。IsNull メソッドを使用して、NULLABLE 列のデータ可用性を確認します。
さまざまな Gen データ タイプでの取得メソッドについては、「データ タイプ情報」の表 4 を参照してください。
JAVA/JDBC
結果セット内のデータを読み取る前に、行にカーソル位置を配置します。
/* To execute SQL (SELECT) query */ if (hstmt_rs.next()) { hv_number = read_rs.getInt(1); hv_name = globdata.getDBMSData().getDBMSManager().getStringFromResultSet( "IEFDB", read_rs, 2); hv_work_phone = globdata.getDBMSData().getDBMSManager(). getStringFromResultSet("IEFDB", read_rs, 3); hvind_work_phone = read_rs.wasNull(); }
データ・タイプに応じて、列データを読み取るために適切なメソッドを選択します。wasNull メソッドを使用してデータの可用性を確認します。
さまざまな Gen データ タイプでの取得メソッドについては、「データ タイプ情報」の表 5 を参照してください。

リソースのクリーンアップ

インライン ステートメントの[コード]セクションを使用して、実行が完了した後にリソースを消去するコードを指定します。データ・アクセス層に固有のリソースは、使用後に解放する必要があります。
  • C/ODBC
/* To execute SQL (INSERT) query */ ret_code = TiodbcFreeStmt(&create_stmt); /* To execute SQL (SELECT) query */ ret_code = TiodbcFreeStmt(&read_stmt); /* To execute SQL (UPDATE) query */ ret_code = TiodbcFreeStmt(&update_stmt);
  • C#/ADO.NET
/* To execute SQL (INSERT) query */ create_cmd.Close(); /* To execute SQL (SELECT) query */ read_rs.Close(); read_cmd.Close(); /* To execute SQL (INSERT) query */ update_cmd.Close();
  • JAVA/JDBC
/* To execute SQL (INSERT) query */ create_cmd.close(); /* To execute SQL (SELECT) query */ read_rs.close(); read_cmd.close(); /* To execute SQL (UPDATE) query */ update_cmd.close();
ダイアログ・ボックスの残りのフィールドに詳細を入力し、
[了解]
をクリックしてダイアログ・ボックスを閉じます。

データ・タイプ情報

以下の SQL C タイプは、SQLBindColumn (3 番目の引数として)または SQLBindParameter (4 番目の引数として) ODBC API を呼び出して列およびクエリのパラメータをバインドするときに使用されます。
表 1:
C/ ODBC
Gen データ・タイプ
ODBC API で使用される SQL C タイプ
TEXT
SQL_C_CHAR
NUMBER
SQL_C_SSHORT
SQL_C_SLONG
SQL_C_DOUBLE
NUMBER (精度が有効)
SQL_C_CHAR
DATE
SQL_C_TYPE_DATE
TIME
SQL_C_TYPE_TIMESTAMP
TIMESTAMP
SQL_C_TYPE_TIMESTAMP
BLOB
<none>
以下のメソッドを使用して、クエリを実行する前にホスト変数でクエリ・パラメータをバインドします。
表 2:
C# / ADO.NET
Gen データ・タイプ
ホスト変数を使用してクエリ・パラメータをバインドする C# メソッド
TEXT
IAbstractCommand.BindParamter
NUMBER
IAbstractCommand.BindParamter
IAbstractCommand.BindParamter
DATE
IAbstractCommand.BindParamter
TIME
IAbstractCommand.BindParamter
TIMESTAMP
IAbstractCommand.BindParamter
BLOB
IAbstractCommand.BindParamter
表 3:
Java / JDBC
Gen データ・タイプ
ホスト変数を使用してクエリ・パラメータをバインドする Java メソッド
TEXT
PreparedStatement.bindParameterString
NUMBER
PreparedStatement.setShort
PreparedStatement.setInt
PreparedStatement.setDouble
PreparedStatement.setBigDecimal
DATE
PreparedStatement.setDate
TIME
PreparedStatement.setTime
TIMESTAMP
PreparedStatement.setTimestamp
BLOB
PreparedStatement.bindParameterBlob
以下のメソッドを使用して、クエリを実行した後に指定された結果セットから列の値を取得します。
表 4:
C# / ADO.NET
Gen データ・タイプ
結果セットから列の値を取得する C# メソッド
TEXT
Globdata.GetDBMSData().GetDBMSManager().GetString
NUMBER
Globdata.GetDBMSData().GetDBMSManager().GetInt16
Globdata.GetDBMSData().GetDBMSManager().GetInt32
Globdata.GetDBMSData().GetDBMSManager().GetDouble
Globdata.GetDBMSData().GetDBMSManager().GetDecimal
DATE
Globdata.GetDBMSData().GetDBMSManager().GetDateTime
TIME
Globdata.GetDBMSData().GetDBMSManager().GetDateTime
TIMESTAMP
Globdata.GetDBMSData().GetDBMSManager().GetDateTime
BLOB
Globdata.GetDBMSData().GetDBMSManager().GetBlob
表 5:
Java / JDBC
Gen データ・タイプ
結果セットから列の値を取得する Java メソッド
TEXT
globdata.getDBMSData().getDBMSManager().getStringFromResultSet
NUMBER
ResultSet.getShort
ResultSet.getInt
ResultSet.getDouble
globdata.getDBMSData().getDBMSManager().getBigDecimalFromResultSet
DATE
ResultSet.getDate
TIME
globdata.getDBMSData().getDBMSManager().getTimeFromResultSet
TIMESTAMP
ResultSet.getTimestamp
BLOB
globdata.getDBMSData().getDBMSManager().getBlobFromResultSet