Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: ISO 92
Summary
SQLDescribeCol liefert für eine Spalte im Ergebnisset den Ergebnisbeschreiber – Spaltenname, Typ, Spaltengröße, Dezimalziffern und Nullfähigkeit – zurück. Diese Informationen sind auch in den Bereichen des IRD verfügbar.
Syntax
SQLRETURN SQLDescribeCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLCHAR * ColumnName,
SQLSMALLINT BufferLength,
SQLSMALLINT * NameLengthPtr,
SQLSMALLINT * DataTypePtr,
SQLULEN * ColumnSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Argumente
StatementHandle
[Eingabe] Anweisungshandle.
Spaltennummer
[Eingabe] Spaltenzahl der Ergebnisdaten, sequentiell in steigender Spaltenreihenfolge geordnet, beginnend bei 1. Das Kolumnennummer-Argument kann ebenfalls auf 0 gesetzt werden, um die Lesezeichenspalte zu beschreiben.
ColumnName
[Ausgabe] Zeiger auf einen null-terminierten Puffer, um den Spaltennamen zurückzugeben. Dieser Wert wird aus dem SQL_DESC_NAME Feld der IRD abgelesen. Wenn die Spalte unbenannt ist oder der Spaltenname nicht bestimmt werden kann, gibt der Treiber eine leere Zeichenkette zurück.
Wenn ColumnName NULL ist, gibt NameLengthPtr weiterhin die Gesamtzahl der Zeichen zurück (ohne das Null-Terminationszeichen für Zeichendaten), die im von ColumnName gezeigten Puffer zurückgegeben werden können.
BufferLength
[Eingabe] Länge des *ColumnName-Puffers , in Zeichen.
NameLengthPtr
[Ausgabe] Zeiger auf einen Puffer, in dem die Gesamtzahl der Zeichen (ohne die Nullbeendigung) zurückgegeben werden kann, die in *ColumnName. Wenn die Anzahl der zurückgegebenen Zeichen größer als oder gleich BufferLength ist, wird der Spaltenname in *ColumnName auf BufferLength minus die Länge eines Null-Endzeichens gekürzt.
DataTypePtr
[Ausgabe] Zeiger auf einen Puffer, in dem der SQL-Datentyp der Spalte zurückgegeben werden kann. Dieser Wert wird aus dem SQL_DESC_CONCISE_TYPE Feld der IRD abgelesen. Dies wird einer der Werte in SQL Data Types sein oder ein treiberspezifischer SQL-Datentyp. Wenn der Datentyp nicht bestimmt werden kann, gibt der Treiber SQL_UNKNOWN_TYPE zurück.
In ODBC 3. x, SQL_TYPE_DATE, SQL_TYPE_TIME oder SQL_TYPE_TIMESTAMP werden in *DataTypePtr für Datum-, Uhrzeit- oder Zeitstempeldaten zurückgegeben; in ODBC 2. x, SQL_DATE, SQL_TIME oder SQL_TIMESTAMP zurückgegeben wird. Der Treiber-Manager führt die erforderlichen Zuordnungen aus, wenn ein ODBC 2 verwendet wird.x-Anwendung arbeitet mit einem ODBC 3.x-Treiber oder ein ODBC 3-Treiber.x-Anwendung arbeitet mit einem ODBC 2.x-Treiber .
Wenn ColumnNumber gleich 0 (für eine Textmarkespalte) ist, wird SQL_BINARY in *DataTypePtr für Textmarken mit variabler Länge zurückgegeben. (SQL_INTEGER wird zurückgegeben, wenn Lesezeichen von einem ODBC 3 verwendet werden.x-Anwendung , die mit einem ODBC 2 arbeitet.x-Treiber oder odbc 2.x-Anwendung , die mit einem ODBC 3 arbeitet.x-Treiber .)
Weitere Informationen zu diesen Datentypen finden Sie unter SQL Data Types im Anhang D: Data Types. Informationen zu treiberspezifischen SQL-Datentypen finden Sie in der Dokumentation des Treibers.
ColumnSizePtr
[Ausgabe] Zeiger auf einen Puffer, um die Größe (in Zeichen) der Spalte in der Datenquelle zurückzugeben. Wenn die Spaltengröße nicht bestimmt werden kann, gibt der Treiber 0 zurück. Weitere Informationen zur Spaltengröße finden Sie unter Spaltengröße, Dezimalziffern, Übertragen der Oktettlänge und Anzeigegröße in Anhang D: Datentypen.
DecimalDigitsPtr
[Ausgabe] Zeiger auf einen Puffer, um die Anzahl der Dezimalziffern der Spalte in der Datenquelle zurückzugeben. Wenn die Anzahl der Dezimalziffern nicht bestimmt werden kann oder nicht anwendbar ist, gibt der Fahrer 0 zurück. Weitere Informationen zu Dezimalziffern finden Sie unter Spaltengröße, Dezimalziffern, Übertragungslänge des Oktetts und Anzeigegröße in Anhang D: Datentypen.
NullablePtr
[Ausgabe] Zeiger auf einen Puffer, in dem ein Wert zurückgegeben wird, der angibt, ob die Spalte NULL-Werte zulässt. Dieser Wert wird aus dem SQL_DESC_NULLABLE Feld des IRD abgelesen. Mögliche Werte:
SQL_NO_NULLS: Die Spalte erlaubt keine NULL-Werte.
SQL_NULLABLE: Die Spalte erlaubt NULL-Werte.
SQL_NULLABLE_UNKNOWN: Der Treiber kann nicht bestimmen, ob die Spalte NULL-Werte zulässt.
Rücklieferungen
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnostics
Wenn SQLDescribeCol entweder SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugehöriger SQLSTATE-Wert erhalten werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle von StatementHandle aufgerufen wird. Die folgende Tabelle listet die SQLSTATE-Werte auf, die häufig von SQLDescribeCol zurückgegeben werden, und erklärt jeden einzelnen im Kontext dieser Funktion; die Notation "(DM)" geht den vom Treibermanager zurückgegebenen SQLSTATE-Beschreibungen voraus. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.
| SQLSTATE | Fehler | Description |
|---|---|---|
| 01000 | Allgemeiner Warnhinweis | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
| 01004 | Zeichenfolgendaten, rechts abgeschnitten | Der Puffer *ColumnName war nicht groß genug, um den gesamten Spaltennamen zurückzugeben, daher wurde der Spaltenname abgeschnitten. Die Länge des untrunkierten Spaltennamens wird in *NameLengthPtr angegeben. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
| 07005 | Prepared Statement, keine Cursor-Spezifikation | Die mit dem StatementHandle verknüpfte Anweisung lieferte kein Ergebnisset. Es gab keine Säulen, die beschrieben werden konnten. |
| 07009 | Ungültiger Deskriptorindex | (DM) Der für das Argument ColumnNumber angegebene Wert war gleich 0, und die SQL_ATTR_USE_BOOKMARKS-Ausweisungsoption war SQL_UB_OFF. Der für das Argument angegebene Wert ColumnNumber war größer als die Anzahl der Spalten im Ergebnisset. |
| 08S01 | Kommunikationslinkfehler | Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde. |
| HY000 | Allgemeiner Fehler | Es ist ein Fehler aufgetreten, für den kein spezifischer SQLSTATE-Wert vorhanden war und für den keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und dessen Ursache. |
| HY001 | Speicherzuweisungsfehler | Der Treiber konnte speicher nicht zuordnen, der erforderlich ist, um die Ausführung oder den Abschluss der Funktion zu unterstützen. |
| HY008 | Vorgang abgebrochen | Die asynchrone Verarbeitung wurde für " StatementHandle" aktiviert. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für die Anweisungshandle aufgerufen. Anschließend wurde die Funktion erneut für " StatementHandle" aufgerufen. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für das StatementHandle von einem anderen Thread in einer Multithreadanwendung aufgerufen. |
| HY010 | Funktionssequenzfehler | (DM) Eine asynchron ausgeführte Funktion wurde für den Verbindungshandle aufgerufen, der dem StatementHandle zugeordnet ist. Diese asynchrone Funktion lief noch, als SQLDescribeCol aufgerufen wurde. (DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für " StatementHandle " aufgerufen und SQL_PARAM_DATA_AVAILABLE zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden. (DM) Eine asynchron ausgeführte Funktion (nicht diese) wurde für das StatementHandle aufgerufen und wurde noch ausgeführt, als diese Funktion aufgerufen wurde. (DM) Die Funktion wurde aufgerufen, bevor SQLPrepare, SQLExecute oder eine Katalogfunktion auf dem Anweisungshandle aufgerufen wurde. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos wurde für " StatementHandle " aufgerufen und SQL_NEED_DATA zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei ausführungsparametern oder -spalten gesendet wurden. |
| HY013 | Speicherverwaltungsfehler | Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen. |
| HY090 | Ungültige Zeichenfolgen- oder Pufferlänge | (DM) Der für argument "BufferLength " angegebene Wert war kleiner als 0. |
| HY117 | Die Verbindung wird aufgrund des unbekannten Transaktionsstatus angehalten. Es sind nur Trenn- und schreibgeschützte Funktionen zulässig. | (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran Function. |
| HYT01 | Verbindungstimeout abgelaufen | Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT festgelegt. |
| IM001 | Dieser Treiber unterstützt diese Funktion nicht. | (DM) Der dem StatementHandle zugeordnete Treiber unterstützt die Funktion nicht. |
| IM017 | Die Abrufung ist im asynchronen Benachrichtigungsmodus deaktiviert. | Immer wenn das Benachrichtigungsmodell verwendet wird, ist die Abrufung deaktiviert. |
| IM018 | SQLCompleteAsync wurde nicht aufgerufen, um den vorherigen asynchronen Vorgang für dieses Handle abzuschließen. | Wenn der vorherige Funktionsaufruf für das Handle SQL_STILL_EXECUTING zurückgibt und der Benachrichtigungsmodus aktiviert ist, muss SQLCompleteAsync für das Handle aufgerufen werden, um die Nachbearbeitung durchzuführen und den Vorgang abzuschließen. |
SQLDescribeCol kann jeden SQLSTATE zurückgeben, der von SQLPrepare oder SQLExecute zurückgegeben werden kann, wenn er nach SQLPrepare und vor SQLExecute aufgerufen wird, abhängig davon, wann die Datenquelle die mit der Anweisung zugeordnete SQL-Anweisung auswertet.
Aus Leistungsgründen sollte eine Anwendung SQLDescribeCol nicht aufrufen, bevor eine Anweisung ausgeführt wird.
Kommentare
Eine Anwendung ruft SQLDescribeCol typischerweise nach einem Aufruf zu SQLPrepare und vor oder nach dem zugehörigen Aufruf zu SQLExecute auf. Eine Anwendung kann nach einem Aufruf von SQLExecDirect auch SQLDescribeCol aufrufen. Weitere Informationen finden Sie unter "Resultset Metadata".
SQLDescribeCol ruft den Spaltennamen, den Typ und die Länge ab, die durch eine SELECT-Anweisung erzeugt werden. Ist die Spalte ein Ausdruck, ist *ColumnName entweder eine leere Zeichenkette oder ein treiberdefinierter Name.
Note
ODBC unterstützt SQL_NULLABLE_UNKNOWN als Erweiterung, obwohl die Open Group und SQL Access Group Call Level Interface-Spezifikation die Option für SQLDescribeCol nicht spezifiziert.
Verwandte Funktionen
| Weitere Informationen zu | Siehe |
|---|---|
| Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol |
| Abbrechen der Verarbeitung von Anweisungen | SQLCancel |
| Zurückgeben von Informationen zu einer Spalte in einem Resultset | Sqlcolattribute |
| Abrufen mehrerer Datenzeilen | SQLFetch |
| Rückgabe der Anzahl der Ergebnismengen-Spalten | SQLNumResultCols |
| Vorbereiten einer Anweisung für die Ausführung | Sqlprepare |