SQL zu C: binär
Die Bezeichner für die binären ODBC SQL-Datentypen sind:
SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
Die folgende Tabelle zeigt die ODBC C-Datentypen, in die binäre SQL-Daten konvertiert werden können. Eine Erklärung der Spalten und Begriffe in der Tabelle finden Sie unter Konvertieren von Daten aus SQL in C-Datentypen.
C-Typbezeichner | Test | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | (Bytelänge der Daten) * 2 <BufferLength (Bytelänge der Daten) * 2 >= BufferLength |
Daten Abgeschnittene Daten |
Länge der Daten in Bytes Länge der Daten in Bytes |
– 01004 |
SQL_C_WCHAR | (Zeichenlänge der Daten) * 2 <BufferLength (Zeichenlänge der Daten) * 2 >= BufferLength |
Daten Abgeschnittene Daten |
Länge der Daten in Zeichen Länge der Daten in Zeichen |
– 01004 |
SQL_C_BINARY | Bytelänge von Daten <= BufferLength Bytelänge der Daten >bufferLength |
Daten Abgeschnittene Daten |
Länge der Daten in Bytes Länge der Daten in Bytes |
– 01004 |
Wenn binäre SQL-Daten in Zeichen C-Daten konvertiert werden, wird jedes Byte (8 Bit) der Quelldaten als zwei ASCII-Zeichen dargestellt. Diese Zeichen sind die ASCII-Zeichendarstellung der Zahl in ihrer hexadezimalen Form. Beispielsweise wird eine binäre 00000001 in "01" und eine binäre 11111111 in "FF" konvertiert.
Der Treiber konvertiert immer einzelne Bytes in Paare von Hexadezimalstellen und beendet die Zeichenfolge mit einem NULL-Byte. Aus diesem Grund wird das letzte Byte des *TargetValuePtr-Puffers nicht verwendet, wenn BufferLength gerade ist und kleiner als die Länge der konvertierten Daten ist. (Die konvertierten Daten erfordern eine gerade Anzahl von Bytes, das vorletzte Byte ist ein NULL-Byte, und das letzte Byte kann nicht verwendet werden.)
Hinweis
Anwendungsentwickler werden davon abgeraten, binäre SQL-Daten an einen Zeichen-C-Datentyp zu binden. Diese Konvertierung ist in der Regel ineffizient und langsam.