SQLExecDirect-Funktion

Konformität
Eingeführte Version: ODBC 1.0-Standards Compliance: ISO 92

Zusammenfassung
SQLExecDirect führt eine präparierbare Anweisung aus, wobei die aktuellen Werte der Parametermarkervariablen verwendet werden, wenn Parameter in der Anweisung vorhanden sind. SQLExecDirect ist die schnellste Möglichkeit, eine SQL-Anweisung für die einmalige Ausführung zu übermitteln.

Syntax

  
SQLRETURN SQLExecDirect(  
     SQLHSTMT     StatementHandle,  
     SQLCHAR *    StatementText,  
     SQLINTEGER   TextLength);  

Argumente

StatementHandle
[Eingabe] Anweisungshandle.

StatementText
[Eingabe] Auszuführende SQL-Anweisung.

TextLength
[Eingabe] Länge von *StatementText in Zeichen.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE oder SQL_PARAM_DATA_AVAILABLE.

Diagnose

Wenn SQLExecDirect entweder SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugeordneter SQLSTATE-Wert abgerufen werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle von StatementHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLExecDirect zurückgegeben werden, und die einzelnen Werte werden 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.)
01001 Cursorvorgangskonflikt *StatementText enthielt eine positionierte update- oder delete-Anweisung, und es wurden keine Zeilen oder mehr als eine Zeile aktualisiert oder gelöscht. (Weitere Informationen zu Updates für mehr als eine Zeile finden Sie in der Beschreibung des SQL_ATTR_SIMULATE_CURSOR-Attributs in SQLSetStmtAttr.)

(Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01003 NULL-Wert in set-Funktion entfernt Das Argument StatementText enthielt eine set-Funktion (z. B. AVG, MAX, MIN usw.), aber nicht die COUNT set-Funktion, und NULL-Argumentwerte wurden entfernt, bevor die Funktion angewendet wurde. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01004 Zeichenfolgendaten, rechts abgeschnitten Zeichenfolgen- oder Binärdaten, die für einen Eingabe-/Ausgabe- oder Ausgabeparameter zurückgegeben wurden, führten zum Abschneiden von Binärdaten ohne oder ungleich NULL. Wenn es sich um einen Zeichenfolgenwert handelte, wurde er rechts abgeschnitten. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01006 Berechtigung nicht widerrufen *StatementText enthielt eine REVOKE-Anweisung , und der Benutzer verfügte nicht über die angegebene Berechtigung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01007 Berechtigung nicht gewährt *StatementText war eine GRANT-Anweisung , und dem Benutzer konnte die angegebene Berechtigung nicht gewährt werden.
01S02 Optionswert geändert Ein angegebenes Anweisungsattribut war aufgrund der Arbeitsbedingungen der Implementierung ungültig, sodass vorübergehend ein ähnlicher Wert ersetzt wurde. (SQLGetStmtAttr kann aufgerufen werden, um zu bestimmen, was der vorübergehend ersetzte Wert ist.) Der Ersatzwert ist für den StatementHandle gültig, bis der Cursor geschlossen wird. An diesem Punkt wird das Anweisungsattribut auf den vorherigen Wert zurückgesetzt. Die Anweisungsattribute, die geändert werden können, sind:

SQL_ ATTR_CONCURRENCY SQL_ ATTR_CURSOR_TYPE SQL_ ATTR_KEYSET_SIZE SQL_ ATTR_MAX_LENGTH SQL_ ATTR_MAX_ROWS SQL_ ATTR_QUERY_TIMEOUT SQL_ ATTR_SIMULATE_CURSOR

(Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01S07 Bruchkürzung Die für einen Eingabe-/Ausgabe- oder Ausgabeparameter zurückgegebenen Daten wurden so abgeschnitten, dass der Bruchteil eines numerischen Datentyps abgeschnitten oder der Bruchteil der Zeitkomponente eines Zeitstempels oder eines Intervalldatentyps abgeschnitten wurde.

(Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
07002 COUNT-Feld falsch Die Anzahl der in SQLBindParameter angegebenen Parameter war kleiner als die Anzahl der Parameter in der SQL-Anweisung, die in *StatementText enthalten ist.

SQLBindParameter wurde aufgerufen, wobei ParameterValuePtr auf einen NULL-Zeiger festgelegt wurde, StrLen_or_IndPtr nicht auf SQL_NULL_DATA oder SQL_DATA_AT_EXEC und InputOutputType nicht auf SQL_PARAM_OUTPUT festgelegt, sodass die in SQLBindParameter angegebene Anzahl von Parametern größer war als die Anzahl der Parameter in der SQL-Anweisung, die in *StatementText enthalten ist.
07006 Verletzung des eingeschränkten Datentyp-Attributs Der durch das ValueType-Argument in SQLBindParameter für den gebundenen Parameter identifizierte Datenwert konnte nicht in den Datentyp konvertiert werden, der durch das ParameterType-Argument in SQLBindParameter identifiziert wird.

Der für einen Parameter zurückgegebene Datenwert, der als SQL_PARAM_INPUT_OUTPUT oder SQL_PARAM_OUTPUT gebunden ist, konnte nicht in den Datentyp konvertiert werden, der durch das ValueType-Argument in SQLBindParameter identifiziert wird.

(Wenn die Datenwerte für eine oder mehrere Zeilen nicht konvertiert werden konnten, aber eine oder mehrere Zeilen erfolgreich zurückgegeben wurden, gibt diese Funktion SQL_SUCCESS_WITH_INFO zurück.)
07007 Eingeschränkte Parameterwertverletzung Der Parametertyp SQL_PARAM_INPUT_OUTPUT_STREAM wird nur für einen Parameter verwendet, der Daten in Teilen sendet und empfängt. Ein eingabegebundener Puffer ist für diesen Parametertyp nicht zulässig.

Dieser Fehler tritt auf, wenn der Parametertyp SQL_PARAM_INPUT_OUTPUT ist und der in SQLBindParameter angegebene *StrLen_or_IndPtr nicht gleich SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) oder SQL_DATA_AT_EXEC ist.
07S01 Ungültige Verwendung des Standardparameters Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, wurde SQL_DEFAULT_PARAM, und der entsprechende Parameter verfügte nicht über einen Standardwert.
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.
21S01 Insert value list does not match column list *StatementText enthielt eine INSERT-Anweisung , und die Anzahl der einzufügenden Werte stimmte nicht mit dem Grad der abgeleiteten Tabelle überein.
21S02 Grad der abgeleiteten Tabelle stimmt nicht mit der Spaltenliste überein *StatementText enthielt eine CREATE VIEW-Anweisung , und die nicht qualifizierte Spaltenliste (die Anzahl der Spalten, die für die Ansicht in den Spaltenbezeichnerargumenten der SQL-Anweisung angegeben wurde) enthielt mehr Namen als die Anzahl der Spalten in der abgeleiteten Tabelle, die durch das Abfragespezifikationsargument der SQL-Anweisung definiert wurde.
22001 Zeichenfolgendaten, rechtes Abschneiden Die Zuweisung eines Zeichen- oder Binärwerts zu einer Spalte führte zum Abschneiden von nichtblanken Zeichendaten oder Binärdaten ungleich NULL.
22002 Indikatorvariable erforderlich, aber nicht angegeben NULL-Daten wurden an einen Ausgabeparameter gebunden, dessen StrLen_or_IndPtr durch SQLBindParameter ein NULL-Zeiger war.
22003 Numerischer Wert außerhalb des Bereichs *StatementText enthielt eine SQL-Anweisung, die einen gebundenen numerischen Parameter oder ein Literal enthielt, und der Wert führte dazu, dass der gesamte (im Gegensatz zu Bruchzahlen) der Zahl abgeschnitten wurde, wenn er der zugeordneten Tabellenspalte zugewiesen wurde.

Die Rückgabe eines numerischen Werts (als numerische oder Zeichenfolge) für einen oder mehrere Eingabe-/Ausgabe- oder Ausgabeparameter hätte dazu geführt, dass der gesamte Teil der Zahl (im Gegensatz zu Bruchteilen) der Zahl abgeschnitten wurde.
22007 Ungültiges datetime-Format *StatementText enthielt eine SQL-Anweisung, die eine Datums-, Uhrzeit- oder Zeitstempelstruktur als gebundenen Parameter enthielt, und der Parameter war jeweils ein ungültiger Datums-, Uhrzeit- oder Zeitstempel.

Ein Eingabe-/Ausgabe- oder Ausgabeparameter wurde an eine Datums-, Uhrzeit- oder Zeitstempel-C-Struktur gebunden, und ein Wert im zurückgegebenen Parameter war ein ungültiger Datums-, Uhrzeit- oder Zeitstempel. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
22008 Datetime-Feldüberlauf *StatementText enthielt eine SQL-Anweisung, die einen datetime-Ausdruck enthielt, der bei der Berechnung zu einer ungültigen Datums-, Uhrzeit- oder Zeitstempelstruktur führte.

Ein datetime-Ausdruck, der für einen Eingabe-/Ausgabe- oder Ausgabeparameter berechnet wurde, führte zu einer ungültigen Datums-, Uhrzeit- oder Zeitstempel-C-Struktur.
22012 Division durch 0 *StatementText enthielt eine SQL-Anweisung, die einen arithmetischen Ausdruck enthielt, der eine Division durch 0 verursachte.

Ein arithmetischer Ausdruck, der für einen Eingabe-/Ausgabe- oder Ausgabeparameter berechnet wurde, führte zu einer Division durch null.
22015 Intervallfeldüberlauf *StatementText enthielt einen exakten numerischen oder Intervallparameter, der bei der Konvertierung in einen SQL-Intervalldatentyp einen Verlust signifikanter Ziffern verursachte.

*StatementText enthielt einen Intervallparameter mit mehr als einem Feld, das bei der Konvertierung in einen numerischen Datentyp in einer Spalte keine Darstellung im numerischen Datentyp hatte.

*StatementText enthielt Parameterdaten, die einem SQL-Intervalltyp zugewiesen wurden, und es gab keine Darstellung des Werts des Typs C im SQL-Typ interval.

Das Zuweisen eines Eingabe-/Ausgabe- oder Ausgabeparameters, der ein exakter numerischer SQL-Typ oder ein Intervall-SQL-Typ war, führte zu einem Verlust signifikanter Ziffern.

Wenn einer Intervall-C-Struktur ein Eingabe-/Ausgabe- oder Ausgabeparameter zugewiesen wurde, gab es keine Darstellung der Daten in der Intervalldatenstruktur.
22018 Ungültiger Zeichenwert für die Umwandlungsspezifikation *StatementText enthielt einen C-Typ, bei dem es sich um einen exakten oder ungefähren numerischen Datentyp, einen datetime-Datentyp oder einen Intervalldatentyp handelte. Der SQL-Typ der Spalte war ein Zeichendatentyp; und der Wert in der Spalte war kein gültiges Literal des gebundenen C-Typs.

Wenn ein Eingabe-/Ausgabe- oder Ausgabeparameter zurückgegeben wurde, war der SQL-Typ ein exakter oder ungefährer numerischer Datentyp, ein datetime- oder ein Intervalldatentyp. der Typ C wurde SQL_C_CHAR; und der Wert in der Spalte war kein gültiges Literal des gebundenen SQL-Typs.
22019 Ungültiges Escapezeichen *StatementText enthielt eine SQL-Anweisung, die ein LIKE-Prädikatmit escape in der WHERE-Klausel enthielt, und die Länge des Escapezeichens nach ESCAPE war nicht gleich 1.
22025 Ungültige Escapesequenz *StatementText enthielt eine SQL-Anweisung, die "LIKE-MusterwertESCAPE-Escapezeichen" in der WHERE-Klausel enthielt, und das Zeichen nach dem Escapezeichen im Musterwert war keins von "%" oder "_".
23000 Verletzung der Integritätseinschränkung *StatementText enthielt eine SQL-Anweisung, die einen Parameter oder ein Literal enthielt. Der Parameterwert war NULL für eine Spalte, die in der zugeordneten Tabellenspalte als NOT NULL definiert wurde, ein doppelter Wert für eine Spalte angegeben wurde, die nur eindeutige Werte enthält, oder eine andere Integritätseinschränkung wurde verletzt.
24.000 Ungültiger Cursorstatus Ein Cursor wurde auf der Anweisungshandle von SQLFetch oder SQLFetchScroll positioniert. Dieser Fehler wird vom Treiber-Manager zurückgegeben, wenn SQLFetch oder SQLFetchScroll nicht SQL_NO_DATA zurückgegeben hat, und vom Treiber zurückgegeben wird, wenn SQLFetch oder SQLFetchScroll SQL_NO_DATA zurückgegeben hat.

Ein Cursor war geöffnet, aber nicht im StatementHandle positioniert.

*StatementText enthielt eine positionierte Update- oder Delete-Anweisung, und der Cursor wurde vor dem Anfang des Resultsets oder nach dem Ende des Resultsets positioniert.
34000 Ungültiger Cursorname *StatementText enthielt eine positionierte update- oder delete-Anweisung, und der Cursor, auf den die ausgeführte Anweisung verweist, war nicht geöffnet.
3D000 Ungültiger Katalogname Der in StatementText angegebene Katalogname war ungültig.
3F000 Ungültiger Schemaname Der in StatementText angegebene Schemaname war ungültig.
40001 Serialisierungsfehler Für die Transaktion wurde aufgrund eines Ressourcen-Deadlocks mit einer anderen Transaktion ein Rollback ausgeführt.
40003 Anweisungsabschluss unbekannt Die zugeordnete Verbindung ist während der Ausführung dieser Funktion fehlgeschlagen, und der Status der Transaktion kann nicht bestimmt werden.
42000 Syntaxfehler oder Zugriffsverletzung *StatementText enthielt eine SQL-Anweisung, die nicht präparierbar war oder einen Syntaxfehler enthielt.

Der Benutzer war nicht berechtigt, die sql-Anweisung auszuführen, die in *StatementText enthalten ist.
42S01 Basistabelle oder -sicht bereits vorhanden *StatementText enthielt eine CREATE TABLE- oder CREATE VIEW-Anweisung , und der angegebene Tabellen- oder Ansichtsname ist bereits vorhanden.
42S02 Basistabelle oder -ansicht nicht gefunden *StatementText enthielt eine DROP TABLE- oder DROP VIEW-Anweisung , und der angegebene Tabellen- oder Ansichtsname war nicht vorhanden.

*StatementText enthielt eine ALTER TABLE-Anweisung , und der angegebene Tabellenname war nicht vorhanden.

*StatementText enthielt eine CREATE VIEW-Anweisung , und ein tabellen- oder Sichtname, der durch die Abfragespezifikation definiert wurde, war nicht vorhanden.

*StatementText enthielt eine CREATE INDEX-Anweisung , und der angegebene Tabellenname war nicht vorhanden.

*StatementText enthielt eine GRANT - oder REVOKE-Anweisung , und der angegebene Tabellen- oder Sichtname war nicht vorhanden.

*StatementText enthielt eine SELECT-Anweisung , und ein angegebener Tabellen- oder Sichtname war nicht vorhanden.

*StatementText enthielt eine DELETE-, INSERT- oder UPDATE-Anweisung, und der angegebene Tabellenname war nicht vorhanden.

*StatementText enthielt eine CREATE TABLE-Anweisung , und eine Tabelle, die in einer Einschränkung angegeben wurde (die auf eine andere Als die erstellte Tabelle verweist) war nicht vorhanden.

*StatementText enthielt eine CREATE SCHEMA-Anweisung , und ein angegebener Tabellen- oder Sichtname war nicht vorhanden.
42S11 Index bereits vorhanden *StatementText enthielt eine CREATE INDEX-Anweisung , und der angegebene Indexname war bereits vorhanden.

*StatementText enthielt eine CREATE SCHEMA-Anweisung , und der angegebene Indexname war bereits vorhanden.
42S12 Index nicht gefunden *StatementText enthielt eine DROP INDEX-Anweisung , und der angegebene Indexname war nicht vorhanden.
42S21 Spalte bereits vorhanden *StatementText enthielt eine ALTER TABLE-Anweisung , und die in der ADD-Klausel angegebene Spalte ist nicht eindeutig oder identifiziert eine vorhandene Spalte in der Basistabelle.
42S22 Spalte nicht gefunden *StatementText enthielt eine CREATE INDEX-Anweisung , und einer oder mehrere der in der Spaltenliste angegebenen Spaltennamen waren nicht vorhanden.

*StatementText enthielt eine GRANT - oder REVOKE-Anweisung , und ein angegebener Spaltenname war nicht vorhanden.

*StatementText enthielt eine SELECT-, DELETE-, INSERT- oder UPDATE-Anweisung , und ein angegebener Spaltenname war nicht vorhanden.

*StatementText enthielt eine CREATE TABLE-Anweisung , und eine Spalte, die in einer Einschränkung angegeben wurde (die auf eine andere Als die erstellte Tabelle verweist) war nicht vorhanden.

*StatementText enthielt eine CREATE SCHEMA-Anweisung , und ein angegebener Spaltenname war nicht vorhanden.
44000 WITH CHECK OPTION-Verstoß Das Argument StatementText enthielt eine INSERT-Anweisung , die für eine angezeigte Tabelle oder eine Tabelle ausgeführt wurde, die von der angezeigten Tabelle abgeleitet wurde, die durch Angabe von WITH CHECK OPTION erstellt wurde, sodass eine oder mehrere zeilen, die von der INSERT-Anweisung betroffen sind, in der angezeigten Tabelle nicht mehr vorhanden sind.

Das Argument StatementText enthielt eine UPDATE-Anweisung , die für eine angezeigte Tabelle oder eine tabelle ausgeführt wurde, die von der angezeigten Tabelle abgeleitet wurde, die durch Angabe von WITH CHECK OPTION erstellt wurde, sodass eine oder mehrere zeilen, die von der UPDATE-Anweisung betroffen sind, in der angezeigten Tabelle nicht mehr vorhanden sind.
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 seine Ursache.
HY001 Fehler bei der Speicherbelegung Der Treiber konnte keinen Arbeitsspeicher zuordnen, der für die Unterstützung der Ausführung oder Fertigstellung der Funktion erforderlich ist.
HY008 Vorgang abgebrochen Die asynchrone Verarbeitung wurde für statementHandle aktiviert. Die Funktion wurde aufgerufen, und vor Abschluss der Ausführung wurde SQLCancel oder SQLCancelHandle für statementHandle aufgerufen. Anschließend wurde die Funktion für die AnweisungHandle erneut aufgerufen.

Die Funktion wurde aufgerufen, und bevor die Ausführung abgeschlossen wurde, wurde SQLCancel oder SQLCancelHandle für die StatementHandle aus einem anderen Thread in einer Multithreadanwendung aufgerufen.
HY009 Ungültige Verwendung des NULL-Zeigers (DM) *StatementText war ein NULL-Zeiger.
HY010 Funktionssequenzfehler (DM) Eine asynchron ausgeführte Funktion wurde für das Verbindungshandle aufgerufen, das dem StatementHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, als die FUNKTION SQLExecDirect 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) 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 der Ausführungsparameter oder -spalten gesendet wurden.
HY013 Fehler bei der Speicherverwaltung Der Funktionsaufruf konnte nicht verarbeitet werden, weil auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund von geringen Arbeitsspeicherbedingungen.
HY090 Ungültige Zeichenfolgen- oder Pufferlänge (DM) Das Argument TextLength war kleiner oder gleich 0, aber nicht gleich SQL_NTS.

Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, war ein NULL-Zeiger, und der Parameterlängenwert war nicht 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM oder kleiner oder gleich SQL_LEN_DATA_AT_EXEC_OFFSET.

Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, war kein NULL-Zeiger. der C-Datentyp war SQL_C_BINARY oder SQL_C_CHAR; und der Parameterlängenwert war kleiner als 0, aber nicht SQL_NTS, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM oder kleiner oder gleich SQL_LEN_DATA_AT_EXEC_OFFSET.

Ein Parameterlängenwert, der durch SQLBindParameter gebunden ist, wurde auf SQL_DATA_AT_EXEC festgelegt. Der SQL-Typ war entweder SQL_LONGVARCHAR, SQL_LONGVARBINARY oder ein datenquellenspezifischer Long-Datentyp. und der SQL_NEED_LONG_DATA_LEN Informationstyp in SQLGetInfo lautete "Y".
HY105 Ungültiger Parametertyp Der für das Argument InputOutputType in SQLBindParameter angegebene Wert wurde SQL_PARAM_OUTPUT, und der Parameter war ein Eingabeparameter.
HY109 Ungültige Cursorposition *StatementText enthielt eine positionierte Update- oder Delete-Anweisung, und der Cursor wurde (von SQLSetPos oder SQLFetchScroll) in einer Zeile positioniert, die gelöscht wurde oder nicht abgerufen werden konnte.
HY117 Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur trenn- und schreibgeschützte Funktionen sind zulässig. (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran-Funktion.
HYC00 Optionales Feature nicht implementiert Die Kombination aus den aktuellen Einstellungen des SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattributes wurde vom Treiber oder der Datenquelle nicht unterstützt.

Das SQL_ATTR_USE_BOOKMARKS-Anweisungsattribut wurde auf SQL_UB_VARIABLE festgelegt, und das Attribut der SQL_ATTR_CURSOR_TYPE-Anweisung wurde auf einen Cursortyp festgelegt, für den der Treiber keine Lesezeichen unterstützt.
HYT00 Timeout abgelaufen Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das Resultset zurückgegeben hat. Der Timeoutzeitraum wird über SQLSetStmtAttr festgelegt, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Verbindungstimeout abgelaufen Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Treiber unterstützt diese Funktion nicht. (DM) Der Der StatementHandle zugeordnete Treiber unterstützt die Funktion nicht.
IM017 Abruf ist im asynchronen Benachrichtigungsmodus deaktiviert. Wenn das Benachrichtigungsmodell verwendet wird, wird die Abfrage 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 Nachverarbeitung durchzuführen und den Vorgang abzuschließen.

Kommentare

Die Anwendung ruft SQLExecDirect auf, um eine SQL-Anweisung an die Datenquelle zu senden. Weitere Informationen zur direkten Ausführung finden Sie unter Direct Execution. Der Treiber ändert die Anweisung so, dass sie die von der Datenquelle verwendete SQL-Form verwendet, und übermittelt sie dann an die Datenquelle. Insbesondere ändert der Treiber die Escapesequenzen, die zum Definieren bestimmter Features in SQL verwendet werden. Die Syntax von Escapesequenzen finden Sie unter Escapesequenzen in ODBC.

Die Anwendung kann einen oder mehrere Parametermarker in die SQL-Anweisung einschließen. Um einen Parametermarker einzuschließen, bettet die Anwendung an der entsprechenden Position ein Fragezeichen (?) in die SQL-Anweisung ein. Informationen zu Parametern finden Sie unter Anweisungsparameter.

Wenn es sich bei der SQL-Anweisung um eine SELECT-Anweisung handelt und die Anwendung SQLSetCursorName aufgerufen hat, um einer Anweisung einen Cursor zuzuordnen, verwendet der Treiber den angegebenen Cursor. Andernfalls generiert der Treiber einen Cursornamen.

Wenn sich die Datenquelle im Modus für manuelle Commits befindet (was eine explizite Transaktionsinitiierung erfordert) und noch keine Transaktion initiiert wurde, initiiert der Treiber eine Transaktion, bevor er die SQL-Anweisung sendet. Weitere Informationen finden Sie unter Manueller Commitmodus.

Wenn eine Anwendung SQLExecDirect zum Übermitteln einer COMMIT- oder ROLLBACK-Anweisung verwendet, ist sie zwischen DBMS-Produkten nicht interoperabel. Zum Committen oder Rollback einer Transaktion ruft eine Anwendung SQLEndTran auf.

Wenn SQLExecDirect auf einen Data-at-Execution-Parameter trifft, wird SQL_NEED_DATA zurückgegeben. Die Anwendung sendet die Daten mithilfe von SQLParamData und SQLPutData. Weitere Informationen finden Sie unter SQLBindParameter, SQLParamData, SQLPutData und Senden von langen Daten.

Wenn SQLExecDirect eine durchsuchte Update-, Insert- oder Delete-Anweisung ausführt, die sich nicht auf Zeilen in der Datenquelle auswirkt, gibt der Aufruf von SQLExecDirect SQL_NO_DATA zurück.

Wenn der Wert des SQL_ATTR_PARAMSET_SIZE-Anweisungsattributs größer als 1 ist und die SQL-Anweisung mindestens einen Parametermarker enthält, führt SQLExecDirect die SQL-Anweisung einmal für jeden Satz von Parameterwerten aus den Arrays aus, auf die das Argument ParameterValuePointer im Aufruf von SQLBindParameter verweist. Weitere Informationen finden Sie unter Arrays von Parameterwerten.

Wenn Lesezeichen aktiviert sind und eine Abfrage ausgeführt wird, die keine Lesezeichen unterstützen kann, sollte der Treiber versuchen, die Umgebung in eine Umgebung zu ermuntern, die Lesezeichen unterstützt, indem er einen Attributwert ändert und SQLSTATE 01S02 (Optionswert geändert) zurückgibt. Wenn das Attribut nicht geändert werden kann, sollte der Treiber SQLSTATE HY024 (Ungültiger Attributwert) zurückgeben.

Hinweis

Bei Verwendung von Verbindungspooling darf eine Anwendung keine SQL-Anweisungen ausführen, die die Datenbank oder den Kontext der Datenbank ändern, z. B. die USEdatabase-Anweisung in SQL Server, die den von einer Datenquelle verwendeten Katalog ändert.

Codebeispiel

Weitere Informationen finden Sie unter SQLBindCol, SQLGetData und Beispiel-ODBC-Programm.

Informationen über Finden Sie unter
Binden eines Puffers an eine Spalte in einem Resultset SQLBindCol-Funktion
Abbrechen der Anweisungsverarbeitung SQLCancel-Funktion
Ausführen eines Commit- oder Rollbackvorgangs SQLEndTran-Funktion
Ausführen einer vorbereiteten SQL-Anweisung SQLExecute-Funktion
Abrufen mehrerer Datenzeilen SQLFetch-Funktion
Abrufen eines Datenblocks oder Scrollen durch ein Resultset SQLFetchScroll-Funktion
Zurückgeben eines Cursornamens SQLGetCursorName-Funktion
Abrufen eines Teils oder des Gesamten einer Datenspalte SQLGetData-Funktion
Zurückgeben des nächsten Parameters zum Senden von Daten für SQLParamData-Funktion
Vorbereiten einer Anweisung für die Ausführung SQLPrepare-Funktion
Senden von Parameterdaten zur Ausführungszeit SQLPutData-Funktion
Festlegen eines Cursornamens SQLSetCursorName-Funktion
Festlegen eines Anweisungsattributs SQLSetStmtAttr-Funktion

Weitere Informationen

ODBC-API-Referenz
ODBC-Headerdateien