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


SQLDescribeCol и SQLColAttribute

SQLDescribeCol и SQLColAttribute используются для получения метаданных результирующих наборов. Разница между этими двумя функциями заключается в том, что SQLDescribeCol всегда возвращает одни и те же пять элементов информации (имя столбца, тип данных, точность, масштабирование и допустимость null), в то время как SQLColAttribute возвращает одну часть информации, запрошенную приложением. Однако SQLColAttribute может возвращать гораздо более широкий выбор метаданных, включая чувствительность к регистру столбца, размер отображения, обновляемость и возможность поиска.

Многие приложения, особенно те, которые отображают только данные, требуют только метаданные, возвращаемые SQLDescribeCol. Для этих приложений быстрее использовать SQLDescribeCol , чем SQLColAttribute , так как данные возвращаются в одном вызове. Другие приложения, особенно которые обновляют данные, требуют дополнительных метаданных, возвращаемых SQLColAttribute , и поэтому используют обе функции. Кроме того, SQLColAttribute поддерживает метаданные для конкретного драйвера. Дополнительные сведения см. в разделе "Типы данных для конкретного драйвера", "Типы данных", "Типы сведений", "Типы диагностики" и "Атрибуты".

Приложение может получать метаданные результирующих наборов в любое время после того, как инструкция была подготовлена или выполнена, и до закрытия курсора над результирующий набор. Очень мало приложений требуют метаданных результирующих наборов после подготовки инструкции и перед выполнением. По возможности приложения должны ожидать получения метаданных до тех пор, пока не будет выполнена инструкция, так как некоторые источники данных не могут возвращать метаданные для подготовленных инструкций и эмулировать эту возможность в драйвере часто является медленным процессом. Например, драйвер может создать результирующий набор нулевой строки, заменив предложение WHERE инструкции SELECT предложением WHERE 1 = 2 и выполнив полученную инструкцию.

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