この項では、SQL 文を構成し、バウンド・パラメータを使用して実行時に文のパラメータ値を設定して実行する方法について説明します。
SQLAllocHandle を使用して文にハンドルを割り付けます。
たとえば、次の文はハンドル dbc
を使用した接続時に、stmt
という名前の SQL_HANDLE_STMT
型のハンドルを割り付けます。
SQLAllocHandle( SQL_HANDLE_STMT, dbc, &stmt ); |
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); |
パラメータに値を割り当てます。
たとえば、次の行は、手順 2 のフラグメントのパラメータに値を割り当てます。
deptID = 201; strcpy( (char * ) deptName, "Sales East" ); managerID = 902; |
通常、これらの変数はユーザのアクションに応じて設定されます。
SQLExecDirect を使って文を実行します。
たとえば、次の行は、ステートメント・ハンドル stmt
の insertstmt
に保持されている文の文字列を実行します。
SQLExecDirect( stmt, insertstmt, SQL_NTS) ; |
また、バインド・パラメータを準備文で使用すると、複数回実行される文のパフォーマンスが向上します。詳細については、準備文の実行を参照してください。
前述のコード・フラグメントには、エラー・チェックは含まれていません。エラー・チェックを含む完全なサンプルについては、samples-dir\SQLAnywhere\ODBCExecute\odbcexecute.cpp を参照してください。
SQLExecDirect の詳細については、Microsoft の『ODBC Programmer's Reference』の「 SQLExecDirect」を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |