Freigeben über


SQLNativeSql-Funktion

Konformität
Version eingeführt: ODBC 1.0-Standardscompliance: ODBC

Zusammenfassung
SQLNativeSql gibt die SQL-Zeichenfolge wie vom Treiber geändert zurück. 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-Textzeichenfolge, die übersetzt werden soll.

TextLength1
[Eingabe] Länge in Zeichen von *InStatementText-Textzeichenfolge .

OutStatementText
[Ausgabe] Zeigen Sie auf einen Puffer, in dem die übersetzte SQL-Zeichenfolge zurückgegeben werden soll.

Wenn OutStatementText NULL ist, gibt TextLength2Ptr weiterhin die Gesamtzahl der Zeichen zurück (mit Ausnahme des Nullendpunkts für Zeichendaten), die für die Rückgabe im Puffer verfügbar sind, auf den OutStatementText verweist.

BufferLength
[Eingabe] Die Anzahl der Zeichen im *OutStatementText-Puffer . In früheren Versionen dieser Dokumentation wurde versehentlich impliziert, dass diese Anzahl von Zeichen auch dann sein muss, wenn der in *InStatementText zurückgegebene Wert eine Unicode-Zeichenfolge ist (beim Aufrufen von SQLNativeSqlW). Es gibt keine solche Einschränkung. Um eine optimale Interoperabilität zu erzielen, sollten Treiberautoren erwarten, dass alle Zeichen an diese Funktion übergeben werden, während Anwendungsautoren empfohlen werden, immer eine gleichmäßige Anzahl zu verwenden.

TextLength2Ptr
[Ausgabe] Zeigen Sie auf einen Puffer, in dem die Gesamtzahl der Zeichen (mit Ausnahme von NULL-Beendigung) zurückgegeben werden soll, die in *OutStatementText zurückgegeben werden können. Wenn die Anzahl der zurückzugebenden Zeichen größer oder gleich "BufferLength" ist, wird die übersetzte SQL-Zeichenfolge in "*OutStatementText" auf "BufferLength" abgeschnitten, minus der Länge eines Null-Beendigungszeichens.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnose

Wenn SQLNativeSql entweder SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugeordneter SQLSTATE-Wert durch Aufrufen von SQLGetDiagRec mit einem HandleType von SQL_HANDLE_DBC und einem Handle of ConnectionHandle abgerufen werden. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLNativeSql zurückgegeben werden, und jede wird im Kontext dieser Funktion erläutert. Die Notation "(DM)" steht vor den Beschreibungen von SQLSTATEs, die vom Treiber-Manager zurückgegeben werden. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.

SQLSTATE Fehler Beschreibung
01000 Allgemeine Warnung Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01004 Zeichenfolgendaten, rechts abgeschnitten Der Puffer *OutStatementText war nicht groß genug, um die gesamte SQL-Zeichenfolge zurückzugeben, sodass die SQL-Zeichenfolge abgeschnitten wurde. Die Länge der nicht eindeutigen SQL-Zeichenfolge wird in *TextLength2Ptr zurückgegeben. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
08003 Verbindung nicht geöffnet Das ConnectionHandle-Element befindet sich nicht im 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 Escapeklausel mit einem ungültigen Datums-, Uhrzeit- oder Zeitstempelwert.
24.000 Ungültiger Cursorstatus Der in der Anweisung erwähnte Cursor wurde vor dem Start des Resultsets oder nach dem Ende des Resultsets positioniert. Dieser Fehler kann nicht von einem Treiber mit einer systemeigenen DBMS-Cursorimplementierung 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 ausgeführte Funktion wurde für " ConnectionHandle " aufgerufen und wurde noch ausgeführt, 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 wurde gelöscht oder nicht abgerufen. Dieser Fehler kann nicht von einem Treiber mit einer systemeigenen DBMS-Cursorimplementierung 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 dem ConnectionHandle zugeordnete Treiber unterstützt die Funktion nicht.

Kommentare

Im Folgenden sehen Sie Beispiele dafür, was SQLNativeSql für die folgende EINGABE-SQL-Zeichenfolge zurückgeben kann, die die skalare Funktion CONVERT enthält. Gehen Sie davon aus, dass die Spalte empid vom Typ INTEGER in der Datenquelle ist:

SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee  

Ein Treiber für Microsoft SQL Server gibt möglicherweise die folgende übersetzte SQL-Zeichenfolge zurück:

SELECT convert (smallint, empid) FROM employee  

Ein Treiber für ORACLE Server gibt möglicherweise die folgende übersetzte SQL-Zeichenfolge zurück:

SELECT to_number (empid) FROM employee  

Ein Treiber für Ingres gibt möglicherweise die folgende übersetzte SQL-Zeichenfolge zurück:

SELECT int2 (empid) FROM employee  

Weitere Informationen finden Sie unter Direct Execution und Prepared Execution.

Keine.

Weitere Informationen

ODBC-API-Referenz
ODBC-Headerdateien