Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere ODBC API » SQL 文の実行

 

バウンド・パラメータを使用した文の実行

この項では、SQL 文を構成し、バウンド・パラメータを使用して実行時に文のパラメータ値を設定して実行する方法について説明します。

♦  ODBC アプリケーションでバウンド・パラメータを使用して SQL 文を実行するには、次の手順に従います。
  1. SQLAllocHandle を使用して文にハンドルを割り付けます。

    たとえば、次の文はハンドル dbc を使用した接続時に、stmt という名前の SQL_HANDLE_STMT 型のハンドルを割り付けます。

    SQLAllocHandle( SQL_HANDLE_STMT, dbc, &stmt );
  2. SQLBindParameter を使用して文のパラメータをバインドします。

    たとえば、次の行は、department ID、department name、manager ID、および文の文字列の値を保持する変数を宣言します。次に、stmt ステートメント・ハンドルを使用して実行される文の 1 番目、2 番目、3 番目のパラメータにパラメータをバインドします。

    #defined DEPT_NAME_LEN 40
    SQLLEN cbDeptID = 0,
       cbDeptName = SQL_NTS, cbManagerID = 0;
    SQLCHAR deptName[ DEPT_NAME_LEN + 1 ];
    SQLSMALLINT deptID, managerID;
    SQLCHAR insertstmt[ STMT_LEN ] =
      "INSERT INTO Departments "
      "( DepartmentID, DepartmentName, DepartmentHeadID )"
      "VALUES (?, ?, ?)"; 
    SQLBindParameter( stmt, 1, SQL_PARAM_INPUT,
        SQL_C_SSHORT, SQL_INTEGER, 0, 0,
        &deptID, 0, &cbDeptID);
    SQLBindParameter( stmt, 2, SQL_PARAM_INPUT,
        SQL_C_CHAR, SQL_CHAR, DEPT_NAME_LEN, 0,
        deptName, 0,&cbDeptName);
    SQLBindParameter( stmt, 3, SQL_PARAM_INPUT,
        SQL_C_SSHORT, SQL_INTEGER, 0, 0,
        &managerID, 0, &cbManagerID);
  3. パラメータに値を割り当てます。

    たとえば、次の行は、手順 2 のフラグメントのパラメータに値を割り当てます。

    deptID = 201;
    strcpy( (char * ) deptName, "Sales East" );
    managerID = 902;

    通常、これらの変数はユーザのアクションに応じて設定されます。

  4. SQLExecDirect を使って文を実行します。

    たとえば、次の行は、ステートメント・ハンドル stmtinsertstmt に保持されている文の文字列を実行します。

    SQLExecDirect( stmt, insertstmt, SQL_NTS) ;

また、バインド・パラメータを準備文で使用すると、複数回実行される文のパフォーマンスが向上します。詳細については、準備文の実行を参照してください。

前述のコード・フラグメントには、エラー・チェックは含まれていません。エラー・チェックを含む完全なサンプルについては、samples-dir\SQLAnywhere\ODBCExecute\odbcexecute.cpp を参照してください。

SQLExecDirect の詳細については、Microsoft の『ODBC Programmer's Reference』の「[external link] SQLExecDirect」を参照してください。