SQL a C: Binary
Los identificadores de los tipos de datos ODBC SQL binarios son:
SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
En la tabla siguiente se muestran los tipos de datos ODBC C a los que se pueden convertir los datos binarios de SQL. Para obtener una explicación de las columnas y los términos de la tabla, vea Convertir datos de SQL a tipos de datos de C.
Identificador de tipo de C | Prueba | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | (Longitud de bytes de los datos) * 2 <BufferLength (Longitud de bytes de datos) * 2 >= BufferLength |
data Datos truncados |
Longitud de los datos en bytes Longitud de los datos en bytes |
N/D 01004 |
SQL_C_WCHAR | (Longitud de caracteres de los datos) * 2 <BufferLength (Longitud de caracteres de los datos) * 2 >= BufferLength |
data Datos truncados |
Longitud de datos en caracteres Longitud de datos en caracteres |
N/D 01004 |
SQL_C_BINARY | Longitud de bytes de datos <= BufferLength Longitud de bytes de BufferLength de datos > |
data Datos truncados |
Longitud de los datos en bytes Longitud de los datos en bytes |
N/D 01004 |
Cuando los datos binarios de SQL se convierten en datos C de caracteres, cada byte (8 bits) de los datos de origen se representa como dos caracteres ASCII. Estos caracteres son la representación de caracteres ASCII del número en su forma hexadecimal. Por ejemplo, un 00000001 binario se convierte en "01" y un 11111111 binario se convierte en "FF".
El controlador siempre convierte bytes individuales en pares de dígitos hexadecimales y finaliza la cadena de caracteres con un byte nulo. Por este motivo, si BufferLength es par y es menor que la longitud de los datos convertidos, no se usa el último byte del búfer *TargetValuePtr . (Los datos convertidos requieren un número par de bytes, el byte siguiente a último es un byte nulo y el último byte no se puede usar).
Nota
No se recomienda a los desarrolladores de aplicaciones enlazar datos binarios de SQL a un tipo de datos de caracteres C. Esta conversión suele ser ineficaz y lenta.