📄 hstmt.c
字号:
/* delet this object (ignore return) */ _iodbcdm_dropstmt (pstmt); break; case SQL_CLOSE: pstmt->cursor_state = en_stmt_cursor_no; /* This means cursor name set by * SQLSetCursorName() call will also * be erased. */ switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: break; case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } break; default: break; } break; case SQL_UNBIND: case SQL_RESET_PARAMS: default: break; } ODBC_UNLOCK (); return retcode;}SQLRETURN SQL_API SQLSetStmtOption ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLUINTEGER vParam){ STMT (pstmt, hstmt); HPROC hproc; int sqlstat = en_00000; SQLRETURN retcode; ENTER_STMT (pstmt);#if (ODBCVER < 0x0300) /* check option */ if ( /* fOption < SQL_STMT_OPT_MIN || */ fOption > SQL_STMT_OPT_MAX) { PUSHSQLERR (pstmt->herr, en_S1092); LEAVE_STMT (pstmt, SQL_ERROR); }#endif /* ODBCVER < 0x0300 */ if (fOption == SQL_CONCURRENCY || fOption == SQL_CURSOR_TYPE || fOption == SQL_SIMULATE_CURSOR || fOption == SQL_USE_BOOKMARKS) { if (pstmt->asyn_on != en_NullProc) { if (pstmt->prep_state) { sqlstat = en_S1011; } } else { switch (pstmt->state) { case en_stmt_prepared: sqlstat = en_S1011; break; case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: if (pstmt->prep_state) { sqlstat = en_S1011; } break; default: break; } } } else { if (pstmt->asyn_on != en_NullProc) { if (!pstmt->prep_state) { sqlstat = en_S1010; } } else { if (pstmt->state >= en_stmt_needdata) { sqlstat = en_S1010; } } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); LEAVE_STMT (pstmt, SQL_ERROR); }#if (ODBCVER >= 0x0300) hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtAttr); if (hproc != SQL_NULL_HPROC) { switch (fOption) { /* ODBC integer attributes */ case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_LENGTH: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_SetStmtAttr, (pstmt->dhstmt, fOption, vParam, 0)); break; /* ODBC3 attributes */ case SQL_ATTR_APP_PARAM_DESC: case SQL_ATTR_APP_ROW_DESC: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_FETCH_BOOKMARK_PTR: case SQL_ATTR_IMP_PARAM_DESC: case SQL_ATTR_IMP_ROW_DESC: case SQL_ATTR_METADATA_ID: case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_PARAMS_PROCESSED_PTR: case SQL_ATTR_PARAMSET_SIZE: case SQL_ATTR_ROW_ARRAY_SIZE: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROW_OPERATION_PTR: case SQL_ATTR_ROW_STATUS_PTR: case SQL_ATTR_ROWS_FETCHED_PTR: PUSHSQLERR (pstmt->herr, en_IM001); LEAVE_STMT (pstmt, SQL_ERROR); default: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_SetStmtAttr, (pstmt->dhstmt, fOption, vParam, SQL_NTS)); } } else#endif { hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtOption); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); LEAVE_STMT (pstmt, SQL_ERROR); } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_SetStmtOption, (pstmt->dhstmt, fOption, vParam)); } LEAVE_STMT (pstmt, retcode);}SQLRETURN SQL_API SQLGetStmtOption ( SQLHSTMT hstmt, SQLUSMALLINT fOption, SQLPOINTER pvParam){ STMT (pstmt, hstmt); HPROC hproc; int sqlstat = en_00000; SQLRETURN retcode; ENTER_STMT (pstmt);#if (ODBCVER < 0x0300) /* check option */ if ( /* fOption < SQL_STMT_OPT_MIN || */ fOption > SQL_STMT_OPT_MAX) { PUSHSQLERR (pstmt->herr, en_S1092); LEAVE_STMT (pstmt, SQL_ERROR); }#endif /* ODBCVER < 0x0300 */ /* check state */ if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc) { sqlstat = en_S1010; } else { switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: case en_stmt_executed: case en_stmt_cursoropen: if (fOption == SQL_ROW_NUMBER || fOption == SQL_GET_BOOKMARK) { sqlstat = en_24000; } break; default: break; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); LEAVE_STMT (pstmt, SQL_ERROR); }#if (ODBCVER >= 0x0300) hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtAttr); if (hproc != SQL_NULL_HPROC) { switch (fOption) { /* ODBC integer attributes */ case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_LENGTH: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_GetStmtAttr, (pstmt->dhstmt, fOption, pvParam, 0, NULL)); break; /* ODBC3 attributes */ case SQL_ATTR_APP_PARAM_DESC: case SQL_ATTR_APP_ROW_DESC: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_FETCH_BOOKMARK_PTR: case SQL_ATTR_IMP_PARAM_DESC: case SQL_ATTR_IMP_ROW_DESC: case SQL_ATTR_METADATA_ID: case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_PARAMS_PROCESSED_PTR: case SQL_ATTR_PARAMSET_SIZE: case SQL_ATTR_ROW_ARRAY_SIZE: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROW_OPERATION_PTR: case SQL_ATTR_ROW_STATUS_PTR: case SQL_ATTR_ROWS_FETCHED_PTR: PUSHSQLERR (pstmt->herr, en_IM001); LEAVE_STMT (pstmt, SQL_ERROR); default: CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_GetStmtAttr, (pstmt->dhstmt, fOption, pvParam, SQL_MAX_OPTION_STRING_LENGTH, NULL)); break; } } else#endif { hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtOption); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); LEAVE_STMT (pstmt, SQL_ERROR); } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_GetStmtOption, (pstmt->dhstmt, fOption, pvParam)); } LEAVE_STMT (pstmt, retcode);}SQLRETURN SQL_API SQLCancel (SQLHSTMT hstmt){ STMT (pstmt, hstmt); HPROC hproc; SQLRETURN retcode; ENTER_STMT (pstmt); /* check argument */ /* check state */ /* call driver */ hproc = _iodbcdm_getproc (pstmt->hdbc, en_Cancel); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); LEAVE_STMT (pstmt, SQL_ERROR); } CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_Cancel, (pstmt->dhstmt)); /* state transition */ if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { LEAVE_STMT (pstmt, retcode); } switch (pstmt->state) { case en_stmt_allocated: case en_stmt_prepared: break; case en_stmt_executed: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } break; case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: if (pstmt->prep_state) { pstmt->state = en_stmt_prepared; } else { pstmt->state = en_stmt_allocated; } break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: switch (pstmt->need_on) { case en_ExecDirect: pstmt->state = en_stmt_allocated; break; case en_Execute: pstmt->state = en_stmt_prepared; break; case en_SetPos: pstmt->state = en_stmt_xfetched; break; default: break; } pstmt->need_on = en_NullProc; break; default: break; } LEAVE_STMT (pstmt, retcode);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -