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


Получение сведений о типе данных с помощью SQLGetTypeInfo

Так как сопоставления базовых типов данных SQL с идентификаторами типов ODBC являются приблизительными, ODBC предоставляет функцию (SQLGetTypeInfo), с помощью которой драйвер может полностью описать каждый тип данных SQL в источнике данных. Эта функция возвращает результирующий набор, каждая строка которой описывает характеристики одного типа данных, например имя, идентификатор типа, точность, масштабирование и допустимость значений NULL.

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

  • Несколько типов данных SQL могут сопоставляться с одним идентификатором типа, что может затруднить определение используемого типа данных. Чтобы решить эту проблему, результирующий набор упорядочен сначала по идентификатору типа и второму по закрытию к определению идентификатора типа. Кроме того, определяемые источником данных типы данных имеют приоритет над пользовательскими типами данных. Например, предположим, что источник данных определяет типы данных INTEGER и COUNTER, которые должны быть одинаковыми, за исключением автоматического увеличения счетчика. Предположим, что определяемый пользователем тип WHOLENUM является синонимом INTEGER. Каждый из этих типов сопоставляется с SQL_INTEGER. В результирующем наборе SQLGetTypeInfo сначала появится INTEGER, за которым следует WHOLENUM, а затем COUNTER. ФУНКЦИЯ WHOLENUM отображается после INTEGER, так как она определена пользователем, но перед СЧЕТЧИКом, так как она более тесно соответствует определению идентификатора типа SQL_INTEGER.

  • ODBC не определяет имена типов данных для использования в инструкциях CREATE TABLE и ALTER TABLE . Вместо этого приложение должно использовать имя, возвращаемое в столбце TYPE_NAME результирующий набор, возвращаемый SQLGetTypeInfo. Причиной этого является то, что, хотя большая часть SQL не зависит от СУБД, имена типов данных различаются в значительной степени. Вместо того, чтобы принудительно анализировать инструкции SQL и заменять стандартные имена типов данных с именами типов данных для СУБД, ODBC требует, чтобы приложения использовали имена субД в первую очередь.

Обратите внимание, что SQLGetTypeInfo не обязательно описывает все типы данных, с которыми может столкнуться приложение. В частности, результирующие наборы могут содержать типы данных, которые не поддерживаются напрямую источником данных. Например, типы данных столбцов в результирующих наборах, возвращаемых функциями каталога, определяются ODBC, и эти типы данных могут не поддерживаться источником данных. Чтобы определить характеристики типов данных в результирующем наборе, приложение вызывает SQLColAttribute.