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
Eingeführte Version: ODBC 1.0 Standards Compliance: ODBC
Summary
SQLNativeSql gibt die SQL-Zeichenkette zurück, wie sie vom Treiber modifiziert wird.
SQLNativeSql führt die SQL-Anweisung nicht aus.
Syntax
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Argumente
ConnectionHandle
[Eingabe] Verbindungshandle.
InStatementText
[Eingabe] SQL-Textzeichen, die übersetzt werden soll.
TextLänge1
[Eingabe] Länge in den Zeichen der *InStatementText-Textzeichenkette .
OutStatementText
[Ausgabe] Zeiger auf einen Puffer, in dem die übersetzte SQL-Zeichenkette zurückgegeben werden kann.
Wenn OutStatementText NULL ist, gibt TextLength2Ptr weiterhin die Gesamtzahl der Zeichen zurück (ohne das Null-Terminationszeichen für Zeichendaten), die im von OutStatementText gezeigten Puffer zurückgegeben werden können.
BufferLength
[Eingabe] Anzahl der Zeichen im *OutStatementText-Puffer . Frühere Versionen dieser Dokumentation deuteten fälschlicherweise an, dass diese Zeichenanzahl auch dann sein muss, wenn der in *InStatementText zurückgegebene Wert eine Unicode-Zeichenkette ist (beim Aufruf von SQLNativeSqlW). Eine solche Einschränkung gibt es nicht. Für optimale Interoperabilität sollten Treiberschreiber erwarten, dass jede Anzahl von Zeichen an diese Funktion weitergegeben wird, während Anwendungsschreiber empfohlen werden, immer eine gerade Anzahl zu verwenden.
TextLength2Ptr
[Ausgabe] Zeiger auf einen Puffer, in dem die Gesamtzahl der Zeichen (ohne Null-Termination) zurückgegeben werden kann, die in *OutStatementText zurückgegeben werden können. Wenn die Anzahl der zurückgegebenen Zeichen größer oder gleich BufferLength ist, wird die übersetzte SQL-Zeichenkette in *OutStatementText auf BufferLength minus die Länge eines Null-Terminationszeichens abgeschnitten.
Rücklieferungen
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnostics
Wenn SQLNativeSql 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_DBC und einem Handle von ConnectionHandle aufgerufen wird. Die folgende Tabelle listet die SQLSTATE-Werte auf, die häufig von SQLNativeSQL 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 *OutStatementText war nicht groß genug, um den gesamten SQL-String zurückzugeben, daher wurde der SQL-String abgeschnitten. Die Länge des untrunkierten SQL-Strings wird in *TextLength2Ptr zurückgegeben. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
| 08003 | Verbindung nicht geöffnet | Der ConnectionHandle war nicht in einem verbundenen Zustand. |
| 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. |
| 22007 | Ungültiges Datetime-Format | * InStatementText enthielt eine Escape-Klausel mit einem ungültigen Datum, einer Uhrzeit oder einem Zeitstempelwert. |
| 24000 | Ungültiger Cursorstatus | Der in der Aussage erwähnte Cursor wurde vor Beginn der Ergebnismenge oder nach dem Ende der Ergebnismenge positioniert. Dieser Fehler kann von einem Treiber mit einer nativen DBMS-Cursor-Implementierung nicht zurückgegeben werden. |
| 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. |
| HY009 | Ungültige Verwendung des Nullzeigers | (DM) *InStatementText war ein Nullzeiger. |
| HY010 | Funktionssequenzfehler | (DM) Eine asynchron ausführende Funktion wurde für den ConnectionHandle aufgerufen und führte noch aus, als diese Funktion aufgerufen wurde. |
| 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) Das Argument TextLength1 war kleiner als 0, aber nicht gleich SQL_NTS. |
| (DM) Das Argument BufferLength war kleiner als 0 und das Argument OutStatementText war kein Nullzeiger. | ||
| HY109 | Ungültige Cursorposition | Die aktuelle Zeile des Cursors war gelöscht oder nicht abgerufen worden. Dieser Fehler kann von einem Treiber mit einer nativen DBMS-Cursor-Implementierung nicht zurückgegeben werden. |
| 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 mit dem ConnectionHandle verknüpfte Treiber unterstützt diese Funktion nicht. |
Kommentare
Im Folgenden finden Sie Beispiele dafür, was SQLNativeSql für die folgende Eingabe-SQL-Zeichenkette mit der skalaren Funktion CONVERT zurückgeben könnte. Angenommen, die Spaltenempid ist vom Typ INTEGER in der Datenquelle:
SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee
Ein Treiber für Microsoft SQL Server könnte den folgenden übersetzten SQL-String zurückgeben:
SELECT convert (smallint, empid) FROM employee
Ein Treiber für ORACLE Server könnte die folgende übersetzte SQL-Zeichenkette zurückgeben:
SELECT to_number (empid) FROM employee
Ein Treiber für Ingres könnte die folgende übersetzte SQL-Zeichenkette zurückgeben:
SELECT int2 (empid) FROM employee
Weitere Informationen finden Sie unter Direkte Ausführung und vorbereitete Ausführung.
Verwandte Funktionen
None.