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

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ プログラミング » ODBC サポート » SQL 文の実行方法

 

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

バインドされたパラメータを使用して SQL 文を構成して実行し、実行時に文のパラメータ値を設定します。また、バインドされたパラメータを準備文で使用すると、複数回実行される文のパフォーマンスが向上します。

前提条件

サンプルを正常に実行するために、次のシステム権限が必要になります。

  • Departments テーブルでの INSERT

 ♦ タスク
  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;
    SQLSMALLINT deptID, managerID;
    SQLCHAR deptName[ DEPT_NAME_LEN + 1 ];
    
    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 );

結果

ビルドして実行されると、アプリケーションは SQL 文を実行します。

次の手順

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

SQLExecDirect の詳細については、[external link] http://msdn.microsoft.com/ja-jp/library/ms713611.aspxにある Microsoft の『ODBC API Reference』を参照してください。

 参照