SQLNativeSql-Funktion

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.

None.