Правильное поведение состоит в том, что SQLPrepare / SQLExecute / SQLFreStmt (stmt, SQL_CLOSE) должен разрешать другой SQLExecute на том же дескрипторе stmt без повторной подготовки. Вы можете увидеть это как действительное изменение состояния в Руководстве для программистов ODBC. Вы можете использовать эту последовательность, если вы выполнили SQLPrepare (sql) и извлекли только некоторые строки (вместо всех), как без SQLFreeStmt (stmt, SQL_CLOSE) или извлечения до тех пор, пока не будет возвращен SQL_NO_DATA, вы получите недопустимый курсор укажите, если вы выпустили другой SQLExecute. SQLFreeStmt (stmt, SQL_DROP) эквивалентен SQLFreeHandle (SQL_HANDLESTMT, stmt) и освобождает весь дескриптор stmt, что означает, что вы больше не сможете его использовать.