Share via


C zu SQL: Zeichen

Die Bezeichner für den ODBC C-Zeichendatentyp sind:

SQL_C_CHAR

SQL_C_WCHAR

Die folgende Tabelle zeigt die ODBC SQL-Datentypen, in die C-Zeichendaten konvertiert werden können. Eine Erläuterung der Spalten und Begriffe in der Tabelle finden Sie unter Konvertieren von Daten aus C in SQL-Datentypen.

Hinweis

Wenn Zeichen-C-Daten in Unicode-SQL-Daten konvertiert werden, muss die Länge der Unicode-Daten eine gerade Zahl sein.

SQL-Typbezeichner Test SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
Bytelänge der Daten <= Spaltenlänge.

Bytelänge der Daten > Spaltenlänge.


22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
Zeichenlänge der Daten <= Spaltenlänge.

Zeichenlänge der Daten > Spaltenlänge.


22001
SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER SQL_BIGINT
Konvertierte Daten ohne Abschneiden

Konvertierte Daten mit Abschneiden von Teilziffern[e]

Die Konvertierung von Daten würde zum Verlust ganzer (im Gegensatz zu bruchbehafteten) Ziffern führen[e]

Der Datenwert ist kein numerisches Literal.


22001

22001

22018
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
Die Daten liegen innerhalb des Bereichs des Datentyps, in den die Zahl konvertiert wird.

Daten liegen außerhalb des Bereichs des Datentyps, in den die Zahl konvertiert wird.

Der Datenwert ist kein numerisches Literal.


22003

22018
SQL_BIT Daten sind 0 oder 1

Daten sind größer als 0, kleiner als 2 und nicht gleich 1

Daten sind kleiner als 0 oder größer als oder gleich 2

Daten sind kein numerisches Literal


22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(Bytelänge der Daten) / 2 <= Spaltenbytelänge

(Bytelänge der Daten) / 2 > Spaltenbytelänge

Der Datenwert ist kein Hexadezimalwert.


22001

22018
SQL_TYPE_DATE Der Datenwert ist ein gültiges ODBC-Datumsliteral.

Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Zeitanteil ist 0 (null)

Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Der Zeitanteil ist ungleich null[a]

Der Datenwert ist kein gültiges ODBC-Date-Literal oder ODBC-timestamp-literal.




22008

22018
SQL_TYPE_TIME Der Datenwert ist ein gültiges ODBC-Time-Literal.

Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile sind null[b]

Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile sind ungleich null[b]

Der Datenwert ist kein gültiges ODBC-Time-Literal oder ODBC-timestamp-literal.




22008

22018
SQL_TYPE_TIMESTAMP Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile nicht abgeschnitten

Der Datenwert ist ein gültiges ODBC-Zeitstempel-Literal. Sekundenbruchteile abgeschnitten

Der Datenwert ist ein gültiger ODBC-date-literal[c]

Der Datenwert ist ein gültiges ODBC-Time-Literal[d]

Der Datenwert ist kein gültiges ODBC-Date-Literal, ODBC-Time-Literal oder ODBC-timestamp-literal.


22008





22018
Alle SQL-Intervalltypen Der Datenwert ist ein gültiger Intervallwert. es tritt keine Abschneidung auf.

Der Datenwert ist ein gültiger Intervallwert. Der Wert in einem der Felder wird abgeschnitten.

Der Datenwert ist kein gültiges Intervallliteral.


22015

22018

[a] Der Zeitteil des Zeitstempels wird abgeschnitten.

[b] Der Datumsteil des Zeitstempels wird ignoriert.

[c] Der Zeitteil des Zeitstempels ist auf Null festgelegt.

[d] Der Datumsteil des Zeitstempels ist auf das aktuelle Datum festgelegt.

[e] Der Treiber/die Datenquelle wartet effektiv, bis die gesamte Zeichenfolge empfangen wurde (auch wenn die Zeichendaten in Teilen durch Aufrufe von SQLPutData gesendet werden), bevor versucht wird, die Konvertierung durchzuführen.

Wenn Zeichen-C-Daten in numerische, Datums-, Uhrzeit- oder Zeitstempel-SQL-Daten konvertiert werden, werden führende und nachfolgende Leerzeichen ignoriert.

Wenn Zeichen-C-Daten in binäre SQL-Daten konvertiert werden, werden alle zwei Bytes von Zeichendaten in ein einzelnes Byte (8 Bit) binärer Daten konvertiert. Alle zwei Bytes von Zeichendaten stellen eine Zahl in hexadezimaler Form dar. Beispielsweise wird "01" in eine binäre 00000001 und "FF" in eine binäre 11111111 konvertiert.

Der Treiber konvertiert Paare von Hexadezimalstellen immer in einzelne Bytes und ignoriert das Byte mit null-Terminierung. Aus diesem Grund wird, wenn die Länge der Zeichenfolge ungerade ist, das letzte Byte der Zeichenfolge (mit Ausnahme des Null-Terminierungsbytes, falls vorhanden) nicht konvertiert.

Hinweis

Anwendungsentwickler werden davon abgeraten, C-Zeichendaten an einen binären SQL-Datentyp zu binden. Diese Konvertierung ist in der Regel ineffizient und langsam.