データのクエリ
接続 後、ステートメントハンドルを割り当てて、ステートメントを実行できます。
SELECT プロシージャ
ステートメントを実行するにはSQLExecDirect を使用し、レコードをフェッチするにはSQLFetch を使用します。SQLBindCol を使用して、結果セットのカラムに変数をバインドできます。結果セットのカラムの番号は1から始まります。
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); SQLDriverConnect(hdbc, 0, (SQLCHAR*)"Dsn=CData REST Source", SQL_NTS, 0, 0, 0, 0); SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); SQLExecDirect(hstmt, (SQLCHAR*)"SELECT personal.name.last FROM NorthwindOData WHERE personal.name.last = '[email protected]'", SQL_NTS); SQLCHAR spersonal.name.last[20] = {0}; SQLLEN cbpersonal.name.last = 0; SQLBindCol(hstmt, 1, SQL_C_CHAR, spersonal.name.last, 20, &cbpersonal.name.last); SQLRETURN retcode = SQLFetch(hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { ... }
結果の反復処理
SQLGetData を使用して、カーソルを反復処理しながら値を取得できます。結果を反復処理するには、SQLFetch を使用して行をフェッチし、SQLGetData を使用してカラム値を取得します。
SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; char spersonal.name.first[255] = {0}; SQLLEN cbId = 0; 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 REST Source", SQL_NTS, 0, 0, 0, 0) == SQL_SUCCESS) { if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc ,&hstmt) == SQL_SUCCESS) { if (SQLExecDirect(hstmt, "SELECT personal.name.first FROM NorthwindOData WHERE personal.name.last = '[email protected]'", SQL_NTS) == SQL_SUCCESS) { while(SQLFetch(hstmt) == SQL_SUCCESS) { if (SQLGetData(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)spersonal.name.first, 255, &cbId) == SQL_SUCCESS) { printf("personal.name.first: %s\n", spersonal.name.first); } } } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } SQLDisconnect(hdbc); } SQLFreeHandle(SQL_HANDLE_DBC, hdbc); } SQLFreeHandle(SQL_HANDLE_ENV, henv); }