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


Преобразование данных из SQL в C: символы

Идентификаторы символьных типов данных ODBC SQL приведены ниже.

  • SQL_CHAR
  • SQL_VARCHAR
  • SQL_LONGVARCHAR
  • SQL_WCHAR
  • SQL_WVARCHAR
  • SQL_WLONGVARCHAR

В следующей таблице показаны типы данных ODBC C, в которые могут быть преобразованы символьные данные SQL. Описание столбцов и терминов в таблице см. в разделе "Преобразование данных из SQL в типы данных C".

Идентификатор типа C Тест TargetValuePtr StrLen_or_IndPtr SQLSTATE
SQL_C_CHAR Длина байтов данных <BufferLength

Длина байтов данных >= BufferLength
Data

Усеченные данные
Длина данных в байтах

Длина данных в байтах
Недоступно

01004
SQL_C_WCHAR Длина символа буфера данных <BufferLength

Длина символов данных >= BufferLength
Data

Усеченные данные
Длина данных в символах

Длина данных в символах
Недоступно

01004
SQL_C_STINYINT SQL_C_UTINYINT SQL_C_TINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SHORT SQL_C_SLONG SQL_C_ULONG SQL_C_LONG SQL_C_NUMERIC Данные преобразуются без усечения[b]

Данные, преобразованные с усечением дробных цифр[a]

Преобразование данных приведет к потере целого (в отличие от дробных) цифр[a]

Данные не являются числовым литеральным[b]
Data

Усеченные данные

Undefined

Undefined
Число байтов типа данных C

Число байтов типа данных C

Undefined

Undefined
Недоступно

01S07

22003

22018
SQL_C_FLOAT SQL_C_DOUBLE Данные находится в диапазоне типа данных, в который преобразуется число[a]

Данные находятся вне диапазона типа данных, в который преобразуется число[a]

Данные не являются числовым литеральным[b]
Data

Undefined

Undefined
Размер типа данных C

Undefined

Undefined
Недоступно

22003

22018
SQL_C_BIT Данные : 0 или 1

Данные больше 0, менее 2 и не равны 1

Данные меньше 0 или больше или равно 2

Данные не являются числовым литералом
Data

Усеченные данные

Undefined

Undefined
1[b]

1[b]

Undefined

Undefined
Недоступно

01S07

22003

22018
SQL_C_BINARY Длина байтов данных <= BufferLength

Длина байтов данных >BufferLength
Data

Усеченные данные
Длина данных в байтах

Длина данных
Недоступно

01004
SQL_C_TYPE_DATE Значение данных — допустимое значение даты[a]

Значение данных является допустимым значением метки времени; часть времени равна нулю[a]

Значение данных является допустимым значением метки времени; часть времени ненулевой[a],[c]

Значение данных не является допустимым значением даты или метки времени[a]
Data

Data

Усеченные данные

Undefined
6[b]

6[b]

6[b]

Undefined
Недоступно

Недоступно

01S07

22018
SQL_C_TYPE_TIME Значение данных является допустимым значением времени, а значение дробных секунд — 0[a]

Значение данных является допустимым значением метки времени или допустимым значением времени; часть дробных секунд равна нулю[a],[d]

Значение данных является допустимым значением метки времени; часть дробных секунд ненулевой[a],[d],[e]

Значение данных не является допустимым значением времени или меткой времени[a]
Data

Data

Усеченные данные

Undefined
6[b]

6[b]

6[b]

Undefined
Недоступно

Недоступно

01S07

22018
SQL_C_TYPE_TIMESTAMP Значение данных — допустимое значение метки времени или допустимое значение времени; часть дробных секунд не усечена[a]

Значение данных — допустимое значение метки времени или допустимое значение времени; часть дробных секунд усечена[a]

Значение данных — допустимое значение даты[a]

Значение данных — допустимое значение времени[a]

Значение данных не является допустимым значением даты, времени или меткой времени[a]
Data

Усеченные данные

Data[f]

Data[g]

Undefined
16[b]

16[b]

16[b]

16[b]

Undefined
Недоступно

01S07

Недоступно

Недоступно

22018
Все типы интервалов C Значение данных является допустимым значением интервала; усечение не выполняется.

Значение данных — допустимое значение интервала; усечение одного или нескольких конечных полей

Допустимый интервал данных; ведущее поле значительной точностью теряется

Значение данных не является допустимым значением интервала
Data

Усеченные данные

Undefined

Undefined
Длина данных в байтах

Длина данных в байтах

Undefined

Undefined
Недоступно

01S07

22015

22018

[a] Значение BufferLength игнорируется для этого преобразования. Драйвер предполагает, что размер *TargetValuePtr — это размер типа данных C.

[b] Это размер соответствующего типа данных C.

[c] Часть времени метки времени усечена.

[d] Часть даты значения метки времени игнорируется.

[e] Доля секунды метки времени усечена.

[f] Поля времени структуры метки времени равны нулю.

[g] Поля даты структуры метки времени задаются текущей датой.

Дополнительные пробелы

Начальные и конечные пробелы игнорируются при преобразовании символьных данных SQL в любой из следующих типов:

  • date
  • numeric
  • Время
  • TIMESTAMP
  • данные интервала C