SQLExecDirect-Funktion
Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: ISO 92
Zusammenfassung
SQLExecDirect führt eine vordefinierte 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] SQL-Anweisung, die ausgeführt werden soll.
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.
Diagnostik
Wenn SQLExecDirect 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_STMT und einem Handle of StatementHandle abgerufen werden. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLExecDirect 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 | Error | Beschreibung |
---|---|---|
01000 | Allgemeiner Warnhinweis | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
01001 | Cursorvorgangskonflikt | *StatementText enthielt eine positionierte Aktualisierungs- oder Löschausweisung, 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 Attribut in SQLSetStmtAttr.) (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
01003 | NULL-Wert in set-Funktion eliminiert | Das Argument "StatementText " enthielt eine Setfunktion (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-/Ausgabeparameter zurückgegeben werden, führten zum Abschneiden von nicht leeren Zeichen- oder Nicht-NULL-Binärdaten. Wenn es sich um einen Zeichenfolgenwert handelte, wurde er mit der rechten Abkürzung versehen. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
01006 | Nicht widerrufene Berechtigungen | *StatementText enthielt eine REVOKE-Anweisung , und der Benutzer verfügte nicht über die angegebenen Berechtigungen. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
01007 | Nicht gewährte Berechtigungen | *StatementText war eine GRANT-Anweisung , und dem Benutzer konnte die angegebene Berechtigung nicht erteilt werden. |
01S02 | Optionswert geändert | Ein angegebenes Anweisungsattribut war aufgrund von Implementierungsbedingungen ungültig, sodass ein ähnlicher Wert vorübergehend ersetzt wurde. (SQLGetStmtAttr kann aufgerufen werden, um zu bestimmen, was der vorübergehend ersetzte Wert ist.) Der Ersatzwert ist für das StatementHandle gültig, bis der Cursor geschlossen ist, an dem sich das Anweisungsattribut auf seinen 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 | Bruchabkürzung | Die für einen Eingabe-/Ausgabeparameter zurückgegebenen Daten wurden abgeschnitten, sodass der Bruchteil eines numerischen Datentyps abgeschnitten oder der Bruchteil der Zeitkomponente eines Zeit-, Zeitstempel- oder 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 mit ParameterValuePtr aufgerufen, auf einen Nullzeiger festgelegt, StrLen_or_IndPtr nicht auf SQL_NULL_DATA oder SQL_DATA_AT_EXEC festgelegt, und InputOutputType wurde nicht auf SQL_PARAM_OUTPUT festgelegt, sodass die Anzahl der in SQLBindParameter angegebenen Parameter 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 wurde. 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 wurde. (Wenn die Datenwerte für eine oder mehrere Zeilen nicht konvertiert werden konnten, aber mindestens eine Zeile erfolgreich zurückgegeben wurden, gibt diese Funktion SQL_SUCCESS_WITH_INFO zurück.) |
07007 | Verletzung des eingeschränkten Parameterwerts | Der Parametertyp SQL_PARAM_INPUT_OUTPUT_STREAM wird nur für einen Parameter verwendet, der Daten in Teilen sendet und empfängt. Für diesen Parametertyp ist kein eingabegebundener Puffer zulässig. Dieser Fehler tritt auf, wenn der Parametertyp SQL_PARAM_INPUT_OUTPUT ist und wenn die in SQLBindParameter angegebene *StrLen_or_IndPtr nicht mit SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) oder SQL_DATA_AT_EXEC identisch ist. |
07S01 | Ungültige Verwendung des Standardparameters | Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, wurde SQL_DEFAULT_PARAM, und der entsprechende Parameter hat keinen 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 | Die Liste einzufügender Werte passt nicht zur Spaltenliste. | *StatementText enthielt eine INSERT-Anweisung , und die Anzahl der einzufügenden Werte entsprach nicht dem Grad der abgeleiteten Tabelle. |
21S02 | Der 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 wurden) enthielt mehr Namen als die Anzahl der Spalten in der abgeleiteten Tabelle, die durch das Abfragespezifikationsargument der SQL-Anweisung definiert wurde. |
22001 | Zeichenfolgendaten, rechter Abschneiden | Die Zuweisung eines Zeichens oder eines Binärwerts zu einer Spalte führte zum Abschneiden von nicht leeren Zeichendaten oder nicht null-Binärdaten. |
22002 | Indikatorvariable erforderlich, aber nicht angegeben | NULL-Daten wurden an einen Ausgabeparameter gebunden, dessen StrLen_or_IndPtr von SQLBindParameter festgelegt wurde. |
22003 | Numerischer Wert außerhalb des Bereichs | *StatementText enthielt eine SQL-Anweisung, die einen gebundenen numerischen Parameter oder literal enthielt, und der Wert verursachte den gesamten Teil (im Gegensatz zu Bruchzahlen) der Zahl, die abgeschnitten wird, wenn sie der zugeordneten Tabellenspalte zugewiesen wurde. Das Zurückgeben eines numerischen Werts (als numerische oder Zeichenfolge) für einen oder mehrere Eingabe-/Ausgabeparameter hätte dazu geführt, dass der gesamte Teil (im Gegensatz zu Bruchzahlen) der Zahl abgeschnitten wird. |
22007 | Ungültiges Datetime-Format | *StatementText enthielt eine SQL-Anweisung, die eine Datums-, Uhrzeit- oder Zeitstempelstruktur als gebundenen Parameter enthielt und der Parameter ein ungültiges Datum, eine Uhrzeit oder ein Zeitstempel war. Ein Eingabe-/Ausgabe- oder Ausgabeparameter wurde an eine Datums-, Uhrzeit- oder Zeitstempel-C-Struktur gebunden, und ein Wert im zurückgegebenen Parameter war bzw. 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 datumstime-Ausdruck, der für einen Eingabe-/Ausgabeparameter berechnet wurde, führte zu einer ungültigen Datums-, Uhrzeit- oder Zeitstempel-C-Struktur. |
22012 | Division durch Null | *StatementText enthielt eine SQL-Anweisung, die einen arithmetischen Ausdruck enthielt, der eine Division durch Null verursacht hat. Ein arithmetischer Ausdruck, der für einen Eingabe-/Ausgabeparameter berechnet wurde, führte zu einer Division durch Null. |
22015 | Intervallfeldüberlauf | *StatementText enthielt einen exakten numerischen oder Intervallparameter, der beim Konvertieren in einen SQL-Intervalldatentyp zu einem Verlust signifikanter Ziffern führte. *StatementText enthielt einen Intervallparameter mit mehr als einem Feld, der beim Konvertieren 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 C-Typs im SQL-Intervalltyp. Das Zuweisen eines Eingabe-/Ausgabe- oder Ausgabeparameters, bei dem es sich um einen genauen numerischen oder Intervall-SQL-Typ handelte, zu einem Intervall-C-Typ führte zu einem Verlust signifikanter Ziffern. Wenn einer Intervall-C-Struktur ein Eingabe-/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, der eine genaue oder ungefähre zahl, datums- oder Intervalldatentyp war; 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 eine genaue oder ungefähre Zahl, ein Datetime- oder ein Intervalldatentyp; der Typ C 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ädikat mit einem ESCAPE in der WHERE-Klausel enthielt und die Länge des Escapezeichens nach ESCAPE nicht gleich 1 war. |
22025 | Ungültige Escapesequenz | *StatementText enthielt eine SQL-Anweisung, die "LIKE pattern value ESCAPE escape character" in der WHERE-Klausel enthielt, und das Zeichen, das auf das Escapezeichen im Musterwert folgt, war keins von "%" oder "_". |
23000 | Integritätseinschränkungsverletzung | *StatementText enthielt eine SQL-Anweisung, die einen Parameter oder ein Literal enthielt. Der Parameterwert war NULL für eine Spalte, die in der zugehörigen Tabellenspalte als NOT NULL definiert wurde, ein doppelter Wert wurde für eine Spalte angegeben, die nur eindeutige Werte enthält, oder eine andere Integritätseinschränkung wurde verletzt. |
24.000 | Ungültiger Cursorstatus | Ein Cursor wurde auf der StatementHandle 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 wurde. Ein Cursor war geöffnet, aber nicht auf der Anweisungshandle positioniert. *StatementText enthielt eine positionierte Aktualisierungs- oder Löschaufweisung, und der Cursor wurde vor dem Start des Resultsets oder nach dem Ende des Resultsets positioniert. |
34000 | Ungültiger Cursorname | *StatementText enthielt eine positionierte Aktualisierungs- oder Lösch-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 | Die Transaktion wurde aufgrund eines Ressourcen-Deadlocks mit einer anderen Transaktion zurückgesetzt. |
40003 | Abschluss der Anweisung unbekannt | Fehler bei der zugehörigen Verbindung während der Ausführung dieser Funktion, und der Status der Transaktion kann nicht bestimmt werden. |
42000 | Syntaxfehler oder Zugriffsverletzung | *StatementText enthielt eine SQL-Anweisung, die nicht vorparierbar war oder einen Syntaxfehler enthielt. Der Benutzer hat keine Berechtigung zum Ausführen der SQL-Anweisung in *StatementText. |
42S01 | Basistabelle oder -ansicht ist 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 es ist kein Tabellen- oder Ansichtsname vorhanden, der von der Abfragespezifikation definiert wurde. *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 Ansichtsname war nicht vorhanden. *StatementText enthielt eine SELECT-Anweisung , und ein angegebener Tabellen- oder Ansichtsname 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 in einer Einschränkung angegebene Tabelle (die auf eine andere Tabelle als die erstellte verweist) war nicht vorhanden. *StatementText enthielt eine CREATE SCHEMA-Anweisung , und ein angegebener Tabellen- oder Ansichtsname war nicht vorhanden. |
42S11 | Index ist bereits vorhanden | *StatementText enthielt eine CREATE INDEX-Anweisung , und der angegebene Indexname ist bereits vorhanden. *StatementText enthielt eine CREATE SCHEMA-Anweisung , und der angegebene Indexname ist bereits vorhanden. |
42S12 | Index nicht gefunden | *StatementText enthielt eine DROP INDEX-Anweisung , und der angegebene Indexname war nicht vorhanden. |
42S21 | Spalte ist 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 mindestens eine der in der Spaltenliste angegebenen Spaltennamen war 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 ist (verweisen auf eine andere Tabelle als die erstellte) ist 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 in einer angezeigten Tabelle oder einer tabelle ausgeführt wurde, die von der angezeigten Tabelle abgeleitet wurde, die durch Angabe von WITH CHECK OPTION erstellt wurde, sodass mindestens eine von der INSERT-Anweisung betroffene Zeile in der angezeigten Tabelle nicht mehr vorhanden ist. Das Argument StatementText enthielt eine UPDATE-Anweisung , die in einer angezeigten Tabelle oder einer tabelle ausgeführt wurde, die von der angezeigten Tabelle abgeleitet wurde, die mit der Angabe von WITH CHECK OPTION erstellt wurde, sodass mindestens eine von der UPDATE-Anweisung betroffene Zeile nicht mehr in der angezeigten Tabelle vorhanden ist. |
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. |
HY008 | Vorgang abgebrochen | Die asynchrone Verarbeitung wurde für " StatementHandle" aktiviert. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für die Anweisungshandle aufgerufen. Anschließend wurde die Funktion erneut für " StatementHandle" aufgerufen. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für das StatementHandle von einem anderen Thread in einer Multithreadanwendung aufgerufen. |
HY009 | Ungültige Verwendung des Nullzeigers | (DM) *StatementText war ein Nullzeiger. |
HY010 | Funktionssequenzfehler | (DM) Eine asynchron ausgeführte Funktion wurde für den Verbindungshandle aufgerufen, der dem StatementHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, als die SQLExecDirect-Funktion 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 ausführungsparametern oder -spalten gesendet wurden. |
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 "TextLength " war kleiner oder gleich 0, aber nicht gleich SQL_NTS. Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, war ein Nullzeiger, und der Parameterlängenwert war nicht 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM oder kleiner als oder gleich SQL_LEN_DATA_AT_EXEC_OFFSET. Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, war kein Nullzeiger. Der Datentyp C wurde 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 als oder gleich SQL_LEN_DATA_AT_EXEC_OFFSET. Ein von SQLBindParameter gebundener Parameterwert wurde auf SQL_DATA_AT_EXEC festgelegt. Der SQL-Typ war entweder SQL_LONGVARCHAR, SQL_LONGVARBINARY oder ein langer datenquellenspezifischer 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 Aktualisierungs- oder Löschanweisungen, und der Cursor wurde (von SQLSetPos oder SQLFetchScroll) in einer Zeile positioniert, die gelöscht oder nicht abgerufen werden konnte. |
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. |
HYC00 | Optionales Feature wurde nicht implementiert | Die Kombination der aktuellen Einstellungen der SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattribute wurde vom Treiber oder der Datenquelle nicht unterstützt. Das attribut der SQL_ATTR_USE_BOOKMARKS-Anweisung 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 überschritten | Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das Resultset zurückgibt. Der Timeoutzeitraum wird über SQLSetStmtAttr SQL_ATTR_QUERY_TIMEOUT festgelegt. |
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 StatementHandle zugeordnete Treiber unterstützt die Funktion nicht. |
IM017 | Die Abrufung ist im asynchronen Benachrichtigungsmodus deaktiviert. | Immer wenn das Benachrichtigungsmodell verwendet wird, ist die Abrufung 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 Nachbearbeitung 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 die Form von SQL verwendet wird, die von der Datenquelle verwendet wird, und sendet sie dann an die Datenquelle. Insbesondere ändert der Treiber die Escapesequenzen, die zum Definieren bestimmter Features in SQL verwendet werden. Informationen zur Syntax von Escapesequenzen finden Sie unter Escapesequenzen in ODBC.
Die Anwendung kann eine oder mehrere Parametermarkierungen in der SQL-Anweisung enthalten. Um eine Parametermarkierung einzuschließen, bettet die Anwendung ein Fragezeichen (?) an der entsprechenden Position 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 zum Zuordnen eines Cursors zu einer Anweisung verwendet, verwendet der Treiber den angegebenen Cursor. Andernfalls generiert der Treiber einen Cursornamen.
Wenn sich die Datenquelle im manuellen Commitmodus befindet (die explizite Transaktionsinitiierung erfordert) und eine Transaktion noch nicht initiiert wurde, initiiert der Treiber eine Transaktion, bevor sie die SQL-Anweisung sendet. Weitere Informationen finden Sie im Manuellen Commit-Modus.
Wenn eine Anwendung SQLExecDirect zum Übermitteln einer COMMIT- oder ROLLBACK-Anweisung verwendet, ist sie nicht interoperabel zwischen DBMS-Produkten. Zum Commit oder Zurücksetzen 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. Siehe SQLBindParameter, SQLParamData, SQLPutData und Senden langer Daten.
Wenn SQLExecDirect eine durchsuchte Aktualisierungs-, Einfüge- oder Löschanweisung 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 attributs der SQL_ATTR_PARAMSET_SIZE-Anweisung größer als 1 ist und die SQL-Anweisung mindestens eine Parametermarkierung enthält, führt SQLExecDirect die SQL-Anweisung einmal für jeden Satz von Parameterwerten aus den Arrays aus, auf die das ParameterValuePointer-Argument im Aufruf von SQLBindParameter verweist. Weitere Informationen finden Sie unter Arrays von Parameterwerten.
Wenn Lesezeichen aktiviert sind und eine Abfrage ausgeführt wird, die Lesezeichen nicht unterstützen kann, sollte der Treiber versuchen, die Umgebung in eine Umgebung zu setzen, die Lesezeichen unterstützt, indem sie einen Attributwert ändern und SQLSTATE 01S02 zurückgeben (Optionswert geändert). 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 USE-Datenbank-Anweisung in SQL Server, die den von einer Datenquelle verwendeten Katalog ändert.
Codebeispiel
Siehe SQLBindCol, SQLGetData und Beispiel-ODBC-Programm.
Verwandte Funktionen
Weitere Informationen zu | Siehe |
---|---|
Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol-Funktion |
Abbrechen der Verarbeitung von Anweisungen | 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 aller Datenspalten | 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 |