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.
Verwandte Funktionen
Keine.