パラメータ化されたステートメント
次のコード例は、パラメータをバインドしてパラメータ化されたステートメントを作成する方法を示します。
パラメータのバインド
SQLBindParameter 関数を使用して、指定されたパラメータ位置を指定された変数にバインドします。パラメータのオーダーは1から始まることに注意してください。
例
次の例は、パラメータ化されたSELECT を実行し、結果を反復処理します。SQLExecDirect を使って、任意のパラメータ化されたステートメントを実行することができます。
SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; char sId[30] = {0}; SQLLEN cbsId = 0; char param[30] = {0}; strcpy(param, "US"); SQLLEN cbParam = SQL_NTS; if (SQLAllocHandle(SQL_HANDLE_ENV, 0 ,&henv) == SQL_SUCCESS) { SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if (SQLAllocHandle(SQL_HANDLE_DBC, henv ,&hdbc) == SQL_SUCCESS) { if (SQLConnect(hdbc, "CData SybaseIQ Source", SQL_NTS, 0, 0, 0, 0) == SQL_SUCCESS) { if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc ,&hstmt) == SQL_SUCCESS) { SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 100, 0, (SQLPOINTER)param, 30, &cbParam); if (SQLExecDirect(hstmt, "SELECT Id FROM [master].[dbo].Products WHERE ProductName = ?", SQL_NTS) == SQL_SUCCESS) { while(SQLFetch(hstmt) == SQL_SUCCESS) { if (SQLGetData(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)sId, 255, &cbsId) == SQL_SUCCESS) { printf("Id: %s\n", sId); } } } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } SQLDisconnect(hdbc); } SQLFreeHandle(SQL_HANDLE_DBC, hdbc); } SQLFreeHandle(SQL_HANDLE_ENV, henv); }