ODBC Driver for Google BigQuery

Build 24.0.9062

パラメータ化されたステートメント

次のコード例は、パラメータをバインドしてパラメータ化されたステートメントを作成する方法を示します。

パラメータのバインド

SQLBindParameter 関数を使用して、指定されたパラメータ位置を指定された変数にバインドします。パラメータのオーダーは1から始まることに注意してください。

次の例は、パラメータ化されたSELECT を実行し、結果を反復処理します。SQLExecDirect を使って、任意のパラメータ化されたステートメントを実行することができます。

  SQLHENV henv;
  SQLHDBC hdbc;
  SQLHSTMT hstmt;
  char sactor.attributes.email[30] = {0};
  SQLLEN cbsactor.attributes.email = 0;
  char param[30] = {0};
  strcpy(param, "[email protected]");
  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 GoogleBigQuery 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 actor.attributes.email FROM [publicdata].[samples].github_nested WHERE repository.name = ?", SQL_NTS) == SQL_SUCCESS) {
            while(SQLFetch(hstmt) == SQL_SUCCESS) {
              if (SQLGetData(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)sactor.attributes.email, 255, &cbsactor.attributes.email) == SQL_SUCCESS) {
                printf("actor.attributes.email: %s\n", sactor.attributes.email);
              }
            }
          }
          SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
        }
        SQLDisconnect(hdbc);
      }
      SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    }
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
  }

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 24.0.9062