Могу ли я вызвать SQLExecute после SQLFreeStmt без SQLPrepare? - PullRequest
0 голосов
/ 14 мая 2010

У меня следующая последовательность кодовых вызовов:

SQLPrepare
SQLExecute(hstmt, SQL_CLOSE);
SQLFreeStmt
//It works till here
SQLExecute //Now it fails.

Почему я должен снова вызывать SQLPrepare, я просто освободил курсор. Я не должен готовить оператор SQL снова.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Правильное поведение состоит в том, что 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, что означает, что вы больше не сможете его использовать.

0 голосов
/ 17 мая 2010

SQLFreeStmt (hstmt, SQL_CLOSE) очищает все, что связано с этим дескриптором оператора, взгляните на summary :

SQLFreeStmt прекращает обработку связано с конкретным утверждением, закрывает любые открытые курсоры, связанные с заявлением, отбрасывает в ожидании результаты или, необязательно, освобождает все ресурсы, связанные с дескриптор оператора.

Если вы не хотите использовать SQLPrepare снова, вы можете использовать SQLExecDirect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...