Типы данных C
Типы данных ODBC C указывают тип данных буферов C, используемых для хранения данных в приложении.
Все драйверы должны поддерживать все типы данных C. Это необходимо, так как все драйверы должны поддерживать все типы C, в которые могут быть преобразованы типы SQL, и все драйверы поддерживают по крайней мере один тип SQL символов. Так как символьный тип SQL можно преобразовать в все типы C, все драйверы должны поддерживать все типы C.
Тип данных C указывается в
В следующих таблицах перечислены допустимые идентификаторы типов для типов данных 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 | unsigned short int |
SQL_C_SLONG[j] | SQLINTEGER | длинная инта |
SQL_C_ULONG[j] | SQLUINTEGER | unsigned long int |
SQL_C_FLOAT | SQLREAL | плавать |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | двойной |
SQL_C_BIT | SQLCHAR | unsigned char |
SQL_C_STINYINT[j] | SQLSCHAR | подписанный символ |
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 SQL_C_TYPE_DATE[c]
typedef ODBC C SQL_DATE_STRUCT
типа C
struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;[a]
идентификатор типа C SQL_C_TYPE_TIME[c]
typedef ODBC C SQL_TIME_STRUCT
типа C
struct tagTIME_STRUCT {
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;[a]
идентификатор типа C SQL_C_TYPE_TIMESTAMP[c]
типодеф ODBC C SQL_TIMESTAMP_STRUCT
типа 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
typedef ODBC C SQL_NUMERIC_STRUCT
типа 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, диспетчер драйверов 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.
Этот раздел содержит следующий раздел.