Поделиться через


Как обработать результаты (ODBC)

Обработка результатов

  1. Получите сведения о результирующем наборе.

  2. Если используются привязанные столбцы, вызовите функцию SQLBindCol для каждого столбца, который нужно связать, чтобы привязать буфер программы к столбцу.

  3. Для каждой строки в результирующем наборе:

    • Вызовите функцию SQLFetch, чтобы получить следующую строку.

    • Если используются привязанные столбцы, используйте данные, теперь доступные в буферах привязанных столбцов.

    • Если используются непривязанные столбцы, вызовите функцию SQLGetData один или несколько раз, чтобы получить данные для непривязанных столбцов после последнего привязанного столбца. Вызовы функции SQLGetData должны следовать по возрастанию номера столбца.

    • Получение данных из столбца типа text или image производится многократным вызовом функции SQLGetData.

  4. Если SQLFetch указывает конец результирующего набора, возвращая SQL_NO_DATA, вызовите функцию SQLMoreResults, чтобы определить, доступен ли другой результирующий набор.

    • Если вернулось значение SQL_SUCCESS, то доступен другой результирующий набор.

    • Если вернулось значение SQL_NO_DATA, то больше нет результирующих наборов.

    • Если вернулось значение SQL_SUCCESS_WITH_INFO или SQL_ERROR, вызовом функции SQLGetDiagRec определите, есть ли выходные данные от инструкции PRINT или RAISERROR.

      Если в качестве выходных параметров используются привязанные параметры инструкции или возвращаемое значение хранимой процедуры, используйте данные, имеющиеся в буферах привязанного параметра. Кроме того, если используются привязанные параметры, при каждом вызове SQLExecute или SQLExecDirect инструкция SQL будет выполняться S раз, где S — количество элементов в массиве привязанных параметров. Это означает, что будет существовать S наборов результатов для обработки, где каждый набор результатов состоит из всех результирующих наборов, выходных параметров и кодов возврата, обычно возвращаемых после одного выполнения инструкции SQL.

    ПримечаниеПримечание

    Когда результирующий набор содержит вычисляемые строки, каждая вычисляемая строка доступна как отдельный результирующий набор. Эти вычисляемые результирующие наборы находятся среди обычных строк, разбивая их на несколько результирующих наборов.

  5. Можно также вызвать функцию SQLFreeStmt с SQL_UNBIND, чтобы освободить все буферы связанных столбцов.

  6. Если есть еще один результирующий набор, перейдите к шагу 1.

ПримечаниеПримечание

Чтобы отменить обработку результирующего набора прежде, чем SQLFetch возвращает значение SQL_NO_DATA, вызовите функцию SQLCloseCursor.