Типы данных C

Типы данных ODBC C указывают тип данных буферов C, используемых для хранения данных в приложении.

Все драйверы должны поддерживать все типы данных C. Это необходимо, так как все драйверы должны поддерживать все типы C, в которые могут быть преобразованы типы SQL, и все драйверы поддерживают по крайней мере один тип SQL символов. Так как символьный тип SQL можно преобразовать в все типы C, все драйверы должны поддерживать все типы C.

Тип данных C указывается в функциях SQLBindCol и SQLGetData с аргументом TargetType и в функции SQLBindParameter с аргументом ValueType . Кроме того, его можно указать путем вызова SQLSetDescField для задания поля SQL_DESC_CONCISE_TYPE ARD или APD или вызова SQLSetDescRec с аргументом Type (и аргументом SubType при необходимости) и аргументом DescriptorHandle, заданным для дескриптора ARD или APD.

В следующих таблицах перечислены допустимые идентификаторы типов для типов данных C. В таблице также перечислены тип данных ODBC C, соответствующий каждому идентификатору и определению этого типа данных.

Идентификатор типа C Типодеф ODBC C Тип C
SQL_C_CHAR SQLCHAR * unsigned char *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT short int
SQL_C_USHORT[j] SQLUSMALLINT короткое целочисленное число без знака
SQL_C_SLONG[j] SQLINTEGER long int
SQL_C_ULONG[j] SQLUINTEGER длинное целочисленное число без знака
SQL_C_FLOAT SQLREAL с плавающей запятой
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT двойной точности
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR signed char
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[ч]
SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h]
SQL_C_BINARY SQLCHAR * unsigned char *
SQL_C_BOOKMARK[i] ЗАКЛАДКА unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR * unsigned char *
Все типы данных интервала C SQL_INTERVAL_STRUCT См. раздел "Структура интервала C" далее в этом приложении.

Идентификатор типа C SQL_C_TYPE_DATE[c]

SQL_DATE_STRUCT типа ODBC C

Тип C

struct tagDATE_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;    
} DATE_STRUCT;[a]  

Идентификатор типа C SQL_C_TYPE_TIME[c]

SQL_TIME_STRUCT типа ODBC C

Тип C

struct tagTIME_STRUCT {  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
} TIME_STRUCT;[a]  

Идентификатор типа C SQL_C_TYPE_TIMESTAMP[c]

SQL_TIMESTAMP_STRUCT типа ODBC C

Тип C

struct tagTIMESTAMP_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
   SQLUINTEGER fraction;[b]   
} TIMESTAMP_STRUCT;[a]  

Идентификатор типа C SQL_C_NUMERIC

SQL_NUMERIC_STRUCT типа ODBC C

Тип C

struct tagSQL_NUMERIC_STRUCT {  
   SQLCHAR precision;  
   SQLSCHAR scale;  
   SQLCHAR sign[g];  
   SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]   
} SQL_NUMERIC_STRUCT;  

Идентификатор типа C SQL_C_GUID

ODBC C typedef SQLGUID

Тип C

struct tagSQLGUID {  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];  
} SQLGUID;[k]  

[a] Значения года, месяца, дня, часа, минуты и второго полей в типах данных datetime C должны соответствовать ограничениям григорианского календаря. (См. раздел Ограничения григорианского календаря далее в этом приложении.)

[b] Значение поля дроби — это количество миллиардов секунд и диапазон от 0 до 999 999 999 999 999 (1 меньше 1 миллиарда). Например, значение поля дроби для половины секунды равно 500 000 000, для тысячной части секунды (один миллисекунд) составляет 1000 000, для миллионной части секунды (один микросекунды) составляет 1000, а для миллиарда секунд (один наносекунд) равен 1.

[c] В ODBC 2.Типы данных x, даты, времени и метки времени C: SQL_C_DATE, SQL_C_TIME и SQL_C_TIMESTAMP.

Приложения ODBC 3*.x* должны использовать SQL_C_VARBOOKMARK, а не SQL_C_BOOKMARK. Когда приложение ODBC 3*.x* работает с ODBC 2.x driver, диспетчер драйверов ODBC 3*.x* сопоставляет SQL_C_VARBOOKMARK с SQL_C_BOOKMARK.

[e] Число хранится в поле val структуры SQL_NUMERIC_STRUCT в виде масштабируемого целого числа в малом режиме байта (левый байт является наименее значимым байтом). Например, число 10.001 base 10 с масштабом 4 масштабируется до целого числа 100010. Так как это 186AA в шестнадцатеричном формате, значение в SQL_NUMERIC_STRUCT будет "AA 86 01 00 00 ... 00", число байтов, определенных SQL_MAX_NUMERIC_LEN #define.

Дополнительные сведения о SQL_NUMERIC_STRUCT см. в разделе HOWTO: получение числовых данных с помощью SQL_NUMERIC_STRUCT.

[f] Поля точности и масштабирования типа данных SQL_C_NUMERIC используются для ввода данных из приложения и выходных данных из драйвера в приложение. Когда драйвер записывает числовое значение в SQL_NUMERIC_STRUCT, он будет использовать собственный драйвер по умолчанию в качестве значения поля точности , и он будет использовать значение в поле SQL_DESC_SCALE дескриптора приложения (которое по умолчанию равно 0) для поля масштабирования . Приложение может предоставлять собственные значения для точности и масштабирования, задав SQL_DESC_PRECISION и SQL_DESC_SCALE поля дескриптора приложения.

[g] Поле знака равно 1, если положительный, 0, если отрицательный.

[h] _int64 может не предоставляться некоторыми компиляторами.

[i] _SQL_C_BOOKMARK не рекомендуется использовать в ODBC 3*.x*.

[j] _SQL_C_SHORT, SQL_C_LONG и SQL_C_TINYINT были заменены в ODBC подписанными и неподписанными типами: SQL_C_SSHORT и SQL_C_USHORT, SQL_C_SLONG и SQL_C_ULONG, а также SQL_C_STINYINT и SQL_C_UTINYINT. Драйвер ODBC 3*.x*, который должен работать с ODBC 2.Приложения x должны поддерживать SQL_C_SHORT, SQL_C_LONG и SQL_C_TINYINT, так как при их вызове диспетчер драйверов передает их драйверу.

[k] SQL_C_GUID можно преобразовать только в SQL_CHAR или SQL_WCHAR.

Этот раздел содержит следующий раздел.

См. также

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