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


Типы данных C в ODBC

ODBC определяет типы данных C, используемые переменными приложения и соответствующими идентификаторами типов. Они используются буферами, привязанными к столбцам результирующего набора и параметрам инструкции. Например, предположим, что приложение хочет получить данные из столбца результирующих наборов в формате символов. Он объявляет переменную с типом данных SQLCHAR * и привязывает эту переменную к столбцу результирующих наборов с идентификатором типа SQL_C_CHAR. Полный список типов данных C и идентификаторов типов см . в приложении D: Типы данных.

ODBC также определяет сопоставление по умолчанию из каждого типа данных SQL с типом данных C. Например, 2-байтовое целое число в источнике данных сопоставляется с 2-байтным целым числом в приложении. Чтобы использовать сопоставление по умолчанию, приложение задает идентификатор типа SQL_C_DEFAULT. Однако использование этого идентификатора не рекомендуется по соображениям взаимодействия.

Все целые типы данных C, определенные в ODBC 1.x , были подписаны. В ODBC 2.0 добавлены типы данных unsigned C и их соответствующие идентификаторы типов. Из-за этого приложения и драйверы должны быть особенно осторожны при работе с версиями 1.x .

Расширяемость типа данных C

В ODBC 3.8 можно указать типы данных C для конкретного драйвера. Это позволяет привязать тип SQL в качестве типа C для конкретного драйвера в приложениях ODBC при вызове SQLBindCol, SQLGetData или SQLBindParameter. Это может быть полезно для поддержки новых типов серверов, так как существующие типы данных C могут неправильно представлять новые типы данных сервера. Использование типов C для конкретного драйвера может увеличить количество преобразований, которые могут выполнять драйверы.

Например, предположим, что система управления базами данных (СУБД) представила новый тип SQL, DATETIMEOFFSET, чтобы представить дату и время с сведениями часового пояса. В ODBC не было бы определенного типа C, соответствующего DATETIMEOFFSET. Приложению потребуется привязать DATETIMEOFFSET как SQL_C_BINARY и привести его к определяемого пользователем типа данных. Начиная с ODBC 3.8 с расширяемостью типа данных C драйвер может определить новый соответствующий тип C. Например, для нового типа SQL DATETIMEOFFSET драйвер может определить новый соответствующий тип C, например SQL_C_DATETIMEOFFSET. Затем приложение может привязать новый тип SQL в качестве типа C для конкретного драйвера.

Тип данных C определяется в драйвере следующим образом:

  • Уровень соответствия ODBC для приложения, драйвера ODBC и диспетчера драйверов — 3.8 (или выше).

  • Диапазон данных типа C для конкретного драйвера находится между 0x4000 и 0x7FFF.

  • Драйвер определяет структуру данных, соответствующих типу C. Это можно сделать в пакете SDK для конкретного драйвера.

Диспетчер драйверов не проверяет тип C, определенный в диапазоне 0x4000 и 0x7FFF; Драйвер выполнит проверку и любое преобразование типов данных. Но если диапазон данных типа C, переданный диспетчеру драйверов, находится между 0x0000 и 0x3FFF или между 0x8000 и 0xFFFF, диспетчер драйверов будет проверять тип данных C.

Примечание.

Типы данных C для конкретного драйвера должны быть описаны в документации по драйверу.

Чтобы указать уровень соответствия ODBC 3.8, приложение вызывает SQLSetEnvAttr с атрибутом SQL_ATTR_ODBC_VERSION, равным SQL_OV_ODBC3_80. Чтобы определить версию драйвера, приложение вызывает SQLGetInfo с SQL_DRIVER_ODBC_VER.

Дополнительные сведения о ODBC 3.8 см. в статье "Новые возможности" в ODBC 3.8.

См. также

Типы данных C