Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Чтобы получить строку данных, приложение вызывает SQLFetch. SQLFetch можно вызывать с любым типом курсора, но он перемещает курсор набора строк только в направлении только вперед. SQLFetch перемещает курсор к следующей строке и возвращает данные для всех столбцов, привязанных к вызовам SQLBindCol. Когда курсор достигает конца результирующего набора, SQLFetch возвращает SQL_NO_DATA. Примеры вызова SQLFetch см. в статье Using SQLBindCol.
Именно то, как реализуется SQLFetch , зависит от драйвера, но общий шаблон заключается в том, чтобы драйвер извлекал данные для любых привязанных столбцов из источника данных, преобразуйте его в соответствии с типами привязанных переменных и поместите преобразованные данные в эти переменные. Если драйвер не может преобразовать данные, SQLFetch возвращает ошибку. Приложение может продолжать получать строки, но данные для текущей строки потеряны. Что происходит с данными для несвязанных столбцов, зависит от драйвера, но большинство драйверов либо извлекают и удаляют его, либо никогда не извлекают его вообще.
Драйвер также задает значения любых буферов длины или индикатора, привязанных. Если значение данных для столбца равно NULL, драйвер задает соответствующий буфер длины или индикатора для SQL_NULL_DATA. Если значение данных не равно NULL, драйвер устанавливает буфер длины или индикатора на длину байтов данных после преобразования. Если эта длина не может быть определена, как и в некоторых случаях с длинными данными, извлекаемыми несколькими вызовами функции, драйвер задает буфер длины или индикатора для SQL_NO_TOTAL. Для типов данных фиксированной длины, таких как целые числа и структуры дат, длина байтов — это размер типа данных.
Для данных переменной длины, таких как символьные и двоичные данные, драйвер проверяет длину байтов преобразованных данных по длине байта буфера, привязанного к столбцу; Длина буфера указана в аргументе BufferLength в SQLBindCol. Если длина байтов преобразованных данных превышает длину байтов буфера, драйвер усекает данные для их размещения в буфере, возвращает неусечённую длину в буфер длины/индикатора, возвращает SQL_SUCCESS_WITH_INFO и помещает SQLSTATE 01004 (данные усечены) в диагностику. Единственное исключение заключается в том, что закладка переменной длины усечена справа при возврате методом SQLFetch, который возвращает SQLSTATE 22001 (Строковые данные, усечены справа).
Данные фиксированной длины никогда не усечены, так как драйвер предполагает, что размер привязанного буфера — это размер типа данных. Усечение данных встречается редко, так как приложение обычно привязывает достаточно большой буфер для хранения всего значения данных; оно определяет необходимый размер из метаданных. Однако приложение может явно привязать буфер, о котором оно знает, что он слишком мал. Например, он может извлекать и отображать первые 20 символов описания части или первые 100 символов длинного текстового столбца.
Символьные данные должны быть null-терминированы драйвером перед возвращением в приложение, даже если данные были усечены. Символ окончания строки null не включается в возвращаемую длину байтов, но требует места в связанном буфере. Например, предположим, что приложение использует строки, состоящие из символьных данных в наборе символов ASCII, драйвер имеет 50 символов возвращаемых данных, а буфер приложения составляет 25 байтов. В буфере приложения драйвер возвращает первые 24 символа, за которым следует символ завершения null. В буфере длины/индикатора возвращается длина 50 байт.
Приложение может ограничить количество строк в результирующем наборе, задав атрибут инструкции SQL_ATTR_MAX_ROWS перед выполнением инструкции, создающей результирующий набор. Например, в режиме предварительного просмотра в приложении, используемом для форматирования отчетов, требуется только достаточно данных, чтобы отобразить первую страницу отчета. Ограничив размер результирующий набор, такая функция будет выполняться быстрее. Этот атрибут инструкции предназначен для уменьшения сетевого трафика и может не поддерживаться всеми драйверами.