Преобразование данных из SQL в C: двоичные данные
Идентификаторы двоичных типов данных ODBC SQL:
SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
В следующей таблице показаны типы данных ODBC C, в которые могут быть преобразованы двоичные данные SQL. Описание столбцов и терминов в таблице см. в разделе "Преобразование данных из SQL в типы данных C".
Идентификатор типа C | Тест | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | (Длина байтов данных) * 2 <BufferLength (Длина байтов данных) * 2 >= BufferLength |
Data Усеченные данные |
Длина данных в байтах Длина данных в байтах |
Недоступно 01004 |
SQL_C_WCHAR | (Длина символов данных) * 2 <BufferLength (Длина символов данных) * 2 >= BufferLength |
Data Усеченные данные |
Длина данных в символах Длина данных в символах |
Недоступно 01004 |
SQL_C_BINARY | Длина байтов данных <= BufferLength Длина байтов данных >BufferLength |
Data Усеченные данные |
Длина данных в байтах Длина данных в байтах |
Недоступно 01004 |
При преобразовании двоичных данных SQL в символьные данные C каждый байт (8 бит) исходных данных представлен как два символа ASCII. Эти символы представляют собой символьное представление числа в шестнадцатеричной форме. Например, двоичный 00000001 преобразуется в "01", а двоичный 11111111 преобразуется в "FF".
Драйвер всегда преобразует отдельные байты в пары шестнадцатеричных цифр и завершает строку символа с байтом NULL. Из-за этого, если BufferLength даже и меньше длины преобразованных данных, последний байт буфера *TargetValuePtr не используется. (Для преобразованных данных требуется четное число байтов, следующее к последнему байту — null байт, а последний байт нельзя использовать.)
Заметка
Разработчикам приложений не рекомендуется привязывать двоичные данные SQL к типу данных C символа C. Это преобразование обычно неэффективно и медленно.