SQLSetStmtAttr-Funktion

Konformität
Version eingeführt: ODBC 3.0 Standards Compliance: ISO 92

Zusammenfassung
SQLSetStmtAttr legt Attribute fest, die sich auf eine Anweisung beziehen.

Hinweis

Weitere Informationen dazu, was der Treiber-Manager dieser Funktion zuordnet, wenn eine ODBC 3.x-Anwendung mit einem ODBC 2.x-Treiber arbeitet, finden Sie unter Zuordnen von Ersatzfunktionen für die Abwärtskompatibilität von Anwendungen.

Syntax

  
SQLRETURN SQLSetStmtAttr(  
     SQLHSTMT      StatementHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

Argumente

StatementHandle
[Eingabe] Anweisungshandle.

Attribut
[Eingabe] Festzulegende Option, die in "Kommentare" aufgeführt ist.

ValuePtr
[Eingabe] Der Wert, der attribut zugeordnet werden soll. Abhängig vom Wert von Attribute ist ValuePtr einer der folgenden:

  • Ein ODBC-Deskriptorhandle.

  • Ein SQLUINTEGER-Wert.

  • Ein SQLULEN-Wert.

  • Ein Zeiger auf einen der folgenden Punkte:

    • Eine NULL-endende Zeichenfolge.

    • Ein binärer Puffer.

    • Ein Wert oder Array vom Typ SQLLEN, SQLULEN oder SQLUSMALLINT.

    • Ein vom Treiber definierter Wert.

Wenn das Argument Attribute ein treiberspezifischer Wert ist, kann ValuePtr eine ganze Zahl mit Vorzeichen sein.

StringLength
[Eingabe] Wenn Attribute ein ODBC-definiertes Attribut ist und ValuePtr auf eine Zeichenfolge oder einen binären Puffer zeigt, sollte dieses Argument die Länge von *ValuePtr haben. Wenn Attribute ein VON ODBC definiertes Attribut und ValuePtr eine ganze Zahl ist, wird StringLength ignoriert.

Wenn Attribut ein vom Treiber definiertes Attribut ist, gibt die Anwendung die Art des Attributs für den Treiber-Manager an, indem das StringLength-Argument festgelegt wird. StringLength kann die folgenden Werte aufweisen:

  • Wenn ValuePtr ein Zeiger auf eine Zeichenfolge ist, ist StringLength die Länge der Zeichenfolge oder SQL_NTS.

  • Wenn ValuePtr ein Zeiger auf einen binären Puffer ist, platziert die Anwendung das Ergebnis des makros SQL_LEN_BINARY_ATTR(length) in StringLength. Dadurch wird ein negativer Wert in StringLength platziert.

  • Wenn ValuePtr ein Zeiger auf einen anderen Wert als eine Zeichenfolge oder eine binäre Zeichenfolge ist, sollte StringLength den Wert SQL_IS_POINTER haben.

  • Wenn ValuePtr einen Wert mit fester Länge enthält, ist StringLength entweder SQL_IS_INTEGER oder SQL_IS_UINTEGER.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnose

Wenn SQLSetStmtAttr 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 of StatementHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLSetStmtAttr 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.)
01S02 Optionswert geändert Der Treiber hat den in ValuePtr angegebenen Wert nicht unterstützt, oder der in ValuePtr angegebene Wert war aufgrund von Implementierungsbedingungen ungültig, sodass der Treiber einen ähnlichen Wert ersetzte. (SQLGetStmtAttr kann aufgerufen werden, um den vorübergehend ersetzten Wert zu bestimmen.) 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_ROW_ARRAY_SIZE SQL_ ATTR_SIMULATE_CURSOR

(Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
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.
24.000 Ungültiger Cursorstatus Das Attribut wurde SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_SIMULATE_CURSOR oder SQL_ATTR_USE_BOOKMARKS, und der Cursor war geöffnet.
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.
HY009 Ungültige Verwendung des NULL-Zeigers Das Argument Attribute identifizierte ein Anweisungsattribut, das ein Zeichenfolgenattribute erforderte, und das ValuePtr-Argument 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 SQLSetStmtAttr 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 wurde für 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.
HY011 Attribut kann jetzt nicht festgelegt werden Das Attribut wurde SQL_ATTR_CONCURRENCY, SQL_ ATTR_CURSOR_TYPE, SQL_ ATTR_SIMULATE_CURSOR oder SQL_ ATTR_USE_BOOKMARKS, und die Anweisung wurde vorbereitet.
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.
HY017 Ungültige Verwendung eines automatisch zugeordneten Deskriptorhandles (DM) Das Attributargument wurde SQL_ATTR_IMP_ROW_DESC oder SQL_ATTR_IMP_PARAM_DESC.

(DM) Das Argument Attribute wurde SQL_ATTR_APP_ROW_DESC oder SQL_ATTR_APP_PARAM_DESC, und der Wert in ValuePtr war ein implizit zugeordnetes Deskriptorhandle, das nicht das Handle war, das ursprünglich der ARD oder APD zugeordnet war.
HY024 Ungültiger Attributwert Aufgrund des angegebenen Attributwerts wurde in ValuePtr ein ungültiger Wert angegeben. (Der Treiber-Manager gibt diesen SQLSTATE-Wert nur für Verbindungs- und Anweisungsattribute zurück, die einen diskreten Satz von Werten akzeptieren, z. B. SQL_ATTR_ACCESS_MODE oder SQL_ ATTR_ASYNC_ENABLE. Für alle anderen Verbindungs- und Anweisungsattribute muss der Treiber den in ValuePtr angegebenen Wert überprüfen.)

Das Argument Attribute wurde SQL_ATTR_APP_ROW_DESC oder SQL_ATTR_APP_PARAM_DESC, und ValuePtr war ein explizit zugeordnetes Deskriptorhandle, das sich nicht über dieselbe Verbindung wie das Argument StatementHandle befindet.
HY090 Ungültige Zeichenfolgen- oder Pufferlänge (DM) *ValuePtr ist eine Zeichenfolge, und das StringLength-Argument war kleiner als 0, wurde aber nicht SQL_NTS.
HY092 Ungültiger Attribut-/Optionsbezeichner (DM) Der für das Argument Attribut angegebene Wert war für die vom Treiber unterstützte ODBC-Version ungültig.

(DM) Der für das Argument Attribut angegebene Wert war ein schreibgeschütztes Attribut.
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 Der für das Argument Attribut angegebene Wert war ein gültiges ODBC-Anweisungsattribut für die vom Treiber unterstützte ODBC-Version, wurde aber vom Treiber nicht unterstützt.

Das Argument Attribute wurde SQL_ATTR_ASYNC_ENABLE, und ein Aufruf von SQLGetInfo mit einem InfoType SQL_ASYNC_MODE gibt SQL_AM_CONNECTION zurück.

Das Argument Attribute wurde SQL_ATTR_ENABLE_AUTO_IPD, und der Wert des Verbindungsattributes SQL_ATTR_AUTO_IPD wurde SQL_FALSE.
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.
S1118 Der Treiber unterstützt keine asynchrone Benachrichtigung. Wenn SQLSetStmtAttr aufgerufen wird, um SQL_ATTR_ASYNC_STMT_EVENT festzulegen; Asynchrone Benachrichtigungen werden vom Treiber nicht unterstützt.

Kommentare

Anweisungsattribute für eine Anweisung bleiben in Kraft, bis sie durch einen anderen Aufruf von SQLSetStmtAttr geändert werden oder bis die Anweisung durch Aufrufen von SQLFreeHandle gelöscht wird. Beim Aufrufen von SQLFreeStmt mit der Option SQL_CLOSE, SQL_UNBIND oder SQL_RESET_PARAMS werden anweisungsattribute nicht zurückgesetzt.

Einige Anweisungsattribute unterstützen die Ersetzung eines ähnlichen Werts, wenn die Datenquelle den in ValuePtr angegebenen Wert nicht unterstützt. In solchen Fällen gibt der Treiber SQL_SUCCESS_WITH_INFO und SQLSTATE 01S02 (Geänderter Optionswert) zurück. Wenn attribut beispielsweise SQL_ATTR_CONCURRENCY undValuePtr SQL_CONCUR_ROWVER ist und die Datenquelle dies nicht unterstützt, ersetzt der Treiber SQL_CONCUR_VALUES und gibt SQL_SUCCESS_WITH_INFO zurück. Um den ersetzten Wert zu bestimmen, ruft eine Anwendung SQLGetStmtAttr auf.

Das Format der mit ValuePtr festgelegten Informationen hängt vom angegebenen Attribut ab. SQLSetStmtAttr akzeptiert Attributinformationen in einem von zwei verschiedenen Formaten: einer Zeichenfolge oder einem ganzzahligen Wert. Das Format der einzelnen Wird in der Beschreibung des Attributs notiert. Dieses Format gilt für die Informationen, die für jedes Attribut in SQLGetStmtAttr zurückgegeben werden. Zeichenfolgen, auf die vom ValuePtr-Argument von SQLSetStmtAttr verwiesen wird, haben eine Länge von StringLength.

Hinweis

Die Möglichkeit, Anweisungsattribute auf Verbindungsebene durch Aufrufen von SQLSetConnectAttr festzulegen, ist in ODBC 3.x veraltet. ODBC 3.x-Anwendungen sollten niemals Anweisungsattribute auf Verbindungsebene festlegen. ODBC 3.x-Anweisungsattribute können nicht auf Verbindungsebene festgelegt werden, mit Ausnahme der Attribute SQL_ATTR_METADATA_ID und SQL_ATTR_ASYNC_ENABLE, die sowohl Verbindungsattribute als auch Anweisungsattribute sind, und können entweder auf Verbindungs- oder Anweisungsebene festgelegt werden.

Hinweis

ODBC 3.x-Treiber müssen diese Funktionalität nur unterstützen, wenn sie mit ODBC 2.x-Anwendungen funktionieren sollen, die ODBC 2.x-Anweisungsoptionen auf Verbindungsebene festlegen. Weitere Informationen finden Sie unter Festlegen von Anweisungsoptionen auf der Verbindungsebene unter SQLSetConnectOption-Zuordnung in Anhang G: Treiberrichtlinien für Abwärtskompatibilität.

Anweisungsattribute, die Deskriptorfelder festlegen

Viele Anweisungsattribute entsprechen einem Headerfeld eines Deskriptors. Das Festlegen dieser Attribute führt tatsächlich zur Einstellung der Deskriptorfelder. Das Festlegen von Feldern durch einen Aufruf von SQLSetStmtAttr anstelle von SQLSetDescField hat den Vorteil, dass für den Funktionsaufruf kein Deskriptorhandle abgerufen werden muss.

Achtung

Der Aufruf von SQLSetStmtAttr für eine Anweisung kann sich auf andere Anweisungen auswirken. Dies tritt auf, wenn die der Anweisung zugeordnete APD oder ARD explizit zugeordnet und auch anderen Anweisungen zugeordnet ist. Da SQLSetStmtAttr die APD oder ARD ändert, gelten die Änderungen für alle Anweisungen, denen dieser Deskriptor zugeordnet ist. Wenn dies nicht das erforderliche Verhalten ist, sollte die Anwendung diesen Deskriptor von den anderen Anweisungen trennen (indem SQLSetStmtAttr aufgerufen wird, um das SQL_ATTR_APP_ROW_DESC oder SQL_ATTR_APP_PARAM_DESC Feld auf ein anderes Deskriptorhandle festzulegen), bevor SQLSetStmtAttr erneut aufgerufen wird.

Wenn ein Deskriptorfeld als Ergebnis des Festlegens des entsprechenden Anweisungsattributs festgelegt wird, wird das Feld nur für die entsprechenden Deskriptoren festgelegt, die derzeit der durch das StatementHandle-Argument identifizierten Anweisung zugeordnet sind, und die Attributeinstellung wirkt sich nicht auf Deskriptoren aus, die dieser Anweisung in Zukunft zugeordnet werden können. Wenn ein Deskriptorfeld, das auch ein Anweisungsattribut ist, durch einen Aufruf von SQLSetDescField festgelegt wird, wird das entsprechende Anweisungsattribut festgelegt. Wenn ein explizit zugeordneter Deskriptor von einer -Anweisung getrennt wird, wird ein Anweisungsattribut, das einem Headerfeld entspricht, auf den Wert des Felds im implizit zugeordneten Deskriptor zurückgesetzt.

Wenn eine Anweisung zugeordnet wird (siehe SQLAllocHandle), werden automatisch vier Deskriptorhandles zugeordnet und der Anweisung zugeordnet. Explizit zugeordnete Deskriptorhandles können der Anweisung zugeordnet werden, indem SQLAllocHandle mit einem fHandleType von SQL_HANDLE_DESC aufgerufen wird, um ein Deskriptorhandle zuzuweisen und dann SQLSetStmtAttr aufzurufen, um das Deskriptorhandle der Anweisung zuzuordnen.

Die Anweisungsattribute in der folgenden Tabelle entsprechen den Kopfzeilenfeldern des Deskriptors.

Anweisungsattribut Headerfeld Desc.
SQL_ATTR_PARAM_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR APD
SQL_ATTR_PARAM_BIND_TYPE SQL_DESC_BIND_TYPE APD
SQL_ATTR_PARAM_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR APD
SQL_ATTR_PARAM_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IPD
SQL_ATTR_PARAMS_PROCESSED_PTR SQL_DESC_ROWS_PROCESSED_PTR IPD
SQL_ATTR_PARAMSET_SIZE SQL_DESC_ARRAY_SIZE APD
SQL_ATTR_ROW_ARRAY_SIZE SQL_DESC_ARRAY_SIZE ARD
SQL_ATTR_ROW_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR ARD
SQL_ATTR_ROW_BIND_TYPE SQL_DESC_BIND_TYPE ARD
SQL_ATTR_ROW_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR ARD
SQL_ATTR_ROW_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IRD
SQL_ATTR_ROWS_FETCHED_PTR SQL_DESC_ROWS_PROCESSED_PTR IRD

Anweisungsattribute

Die derzeit definierten Attribute und die Version von ODBC, in der sie eingeführt wurden, sind in der folgenden Tabelle dargestellt: Es wird erwartet, dass mehr Attribute von Treibern definiert werden, um verschiedene Datenquellen zu nutzen. Ein Bereich von Attributen wird von ODBC reserviert. Treiberentwickler müssen Werte für ihre eigene treiberspezifische Verwendung über Open Group reservieren. Weitere Informationen finden Sie unter Treiberspezifische Datentypen, Deskriptortypen, Informationstypen, Diagnosetypen und Attribute.

attribute ValuePtr-Inhalte
SQL_ATTR_APP_PARAM_DESC (ODBC 3.0) Das Handle für die APD für nachfolgende Aufrufe von SQLExecute und SQLExecDirect im Anweisungshandle. Der Anfangswert dieses Attributs ist der Deskriptor, der implizit bei der anfänglichen Zuordnung der Anweisung zugeordnet wurde. Wenn der Wert dieses Attributs auf SQL_NULL_DESC oder das Handle festgelegt ist, das ursprünglich für den Deskriptor zugewiesen wurde, wird ein explizit zugeordnetes APD-Handle, das zuvor dem Anweisungshandle zugeordnet war, von diesem getrennt, und das Anweisungshandle wird auf das implizit zugeordnete APD-Handle zurückgesetzt.

Dieses Attribut kann nicht auf ein Deskriptorhandle festgelegt werden, das implizit für eine andere Anweisung zugewiesen wurde, oder auf ein anderes Deskriptorhandle, das implizit für dieselbe Anweisung festgelegt wurde. Implizit zugeordnete Deskriptorhandles dürfen nicht mehr als einer Anweisung oder einem Deskriptorhandle zugeordnet werden.
SQL_ATTR_APP_ROW_DESC (ODBC 3.0) Das Handle an die ARD für nachfolgende Abrufe auf dem Anweisungshandle. Der Anfangswert dieses Attributs ist der Deskriptor, der implizit bei der anfänglichen Zuordnung der Anweisung zugeordnet wurde. Wenn der Wert dieses Attributs auf SQL_NULL_DESC oder das Handle festgelegt ist, das ursprünglich für den Deskriptor zugewiesen wurde, wird ein explizit zugeordnetes ARD-Handle, das zuvor dem Anweisungshandle zugeordnet war, von diesem getrennt, und das Anweisungshandle wird auf das implizit zugeordnete ARD-Handle zurückgesetzt.

Dieses Attribut kann nicht auf ein Deskriptorhandle festgelegt werden, das implizit für eine andere Anweisung zugewiesen wurde, oder auf ein anderes Deskriptorhandle, das implizit für dieselbe Anweisung festgelegt wurde. Implizit zugeordnete Deskriptorhandles dürfen nicht mehr als einer Anweisung oder einem Deskriptorhandle zugeordnet werden.
SQL_ATTR_ASYNC_ENABLE (ODBC 1.0) Ein SQLULEN-Wert, der angibt, ob eine Mit der angegebenen Anweisung aufgerufene Funktion asynchron ausgeführt wird:

SQL_ASYNC_ENABLE_OFF = Asynchrone Ausführungsunterstützung auf Anweisungsebene deaktivieren (Standard).

SQL_ASYNC_ENABLE_ON = Asynchrone Ausführungsunterstützung auf Anweisungsebene aktivieren.

Weitere Informationen finden Sie unter Asynchrone Ausführung (Abfragemethode).

Bei Treibern mit Unterstützung für asynchrone Ausführung auf Anweisungsebene ist das Anweisungsattribut SQL_ATTR_ASYNC_ENABLE schreibgeschützt. Sein Wert ist identisch mit dem Wert des Attributs auf Verbindungsebene mit demselben Namen zum Zeitpunkt der Zuordnung des Anweisungshandles.

Aufrufen von SQLSetStmtAttr , um SQL_ATTR_ASYNC_ENABLE festzulegen, wenn der SQL_ASYNC_MODE InfoType SQL_AM_CONNECTION SQLSTATE HYC00 zurückgibt (Optionales Feature nicht implementiert). Weitere Informationen finden Sie unter SQLSetConnectAttr-Funktion .
SQL_ATTR_ASYNC_STMT_EVENT (ODBC 3.8) Ein SQLPOINTER-Wert, der ein Ereignishandle ist.

Die Benachrichtigung über den Abschluss asynchroner Funktionen wird aktiviert, indem SQLSetStmtAttr aufgerufen wird, um das attribut SQL_ATTR_ASYNC_STMT_EVENT festzulegen und das Ereignishandle anzugeben.
SQL_ATTR_ASYNC_STMT_PCALLBACK (ODBC 3.8) Ein SQLPOINTER für die asynchrone Rückruffunktion.

Nur der Treiber-Manager kann die SQLSetStmtAttr-Funktion eines Treibers mit diesem Attribut aufrufen.
SQL_ATTR_ASYNC_STMT_PCONTEXT (ODBC 3.8) Ein SQLPOINTER für die Kontextstruktur

Nur der Treiber-Manager kann die SQLSetStmtAttr-Funktion eines Treibers mit diesem Attribut aufrufen.
SQL_ATTR_CONCURRENCY (ODBC 2.0) Ein SQLULEN-Wert, der die Parallelität des Cursors angibt:

SQL_CONCUR_READ_ONLY = Cursor ist schreibgeschützt. Es sind keine Updates zulässig.

SQL_CONCUR_LOCK = Cursor verwendet die niedrigste Sperrebene, die ausreichend ist, um sicherzustellen, dass die Zeile aktualisiert werden kann.

SQL_CONCUR_ROWVER = Cursor verwendet eine optimistische Parallelitätssteuerung, die Zeilenversionen wie SQLBase ROWID oder Sybase TIMESTAMP vergleicht.

SQL_CONCUR_VALUES = Cursor verwendet eine optimistische Parallelitätssteuerung, um Werte zu vergleichen.

Der Standardwert für SQL_ATTR_CONCURRENCY ist SQL_CONCUR_READ_ONLY.

Dieses Attribut kann nicht für einen geöffneten Cursor angegeben werden. Weitere Informationen finden Sie unter Parallelitätstypen.

Wenn das SQL_ATTR_CURSOR_TYPE-Attribut in einen Typ geändert wird, der den aktuellen Wert von SQL_ATTR_CONCURRENCY nicht unterstützt, wird der Wert von SQL_ATTR_CONCURRENCY zur Ausführungszeit geändert und eine Warnung ausgegeben, wenn SQLExecDirect oder SQLPrepare aufgerufen wird.

Wenn der Treiber die SELECT FOR UPDATE-Anweisung unterstützt und eine solche Anweisung ausgeführt wird, während der Wert von SQL_ATTR_CONCURRENCY auf SQL_CONCUR_READ_ONLY festgelegt ist, wird ein Fehler zurückgegeben. Wenn der Wert von SQL_ATTR_CONCURRENCY in einen Wert geändert wird, den der Treiber für einen Wert von SQL_ATTR_CURSOR_TYPE, aber nicht für den aktuellen Wert von SQL_ATTR_CURSOR_TYPE unterstützt, wird der Wert von SQL_ATTR_CURSOR_TYPE zur Ausführungszeit geändert, und SQLSTATE 01S02 (Optionswert geändert) wird ausgegeben, wenn SQLExecDirect oder SQLPrepare aufgerufen wird.

Wenn die angegebene Parallelität von der Datenquelle nicht unterstützt wird, ersetzt der Treiber eine andere Parallelität und gibt SQLSTATE 01S02 (Optionswert geändert) zurück. Bei SQL_CONCUR_VALUES ersetzt der Fahrer SQL_CONCUR_ROWVER und umgekehrt. Für SQL_CONCUR_LOCK ersetzt der Fahrer in der Reihenfolge SQL_CONCUR_ROWVER oder SQL_CONCUR_VALUES. Die Gültigkeit des ersetzten Werts wird erst nach der Ausführungszeit überprüft.

Weitere Informationen zur Beziehung zwischen SQL_ATTR_CONCURRENCY und den anderen Cursorattributen finden Sie unter Cursormerkmale und Cursortyp.
SQL_ATTR_CURSOR_SCROLLABLE (ODBC 3.0) Ein SQLULEN-Wert, der die Unterstützungsebene angibt, die die Anwendung benötigt. Das Festlegen dieses Attributs wirkt sich auf nachfolgende Aufrufe von SQLExecDirect und SQLExecute aus.

SQL_NONSCROLLABLE = Scrollbare Cursor sind für das Anweisungshandle nicht erforderlich. Wenn die Anwendung SQLFetchScroll für dieses Handle aufruft, ist der einzige gültige Wert von FetchOrientation SQL_FETCH_NEXT. Dies ist die Standardoption.

SQL_SCROLLABLE = Scrollbare Cursor sind für das Anweisungshandle erforderlich. Beim Aufrufen von SQLFetchScroll kann die Anwendung einen beliebigen gültigen Wert von FetchOrientation angeben, wodurch die Cursorpositionierung in anderen Modi als dem sequenziellen Modus erreicht wird.

Weitere Informationen zu scrollbaren Cursorn finden Sie unter Scrollbare Cursor. Weitere Informationen zur Beziehung zwischen SQL_ATTR_CURSOR_SCROLLABLE und den anderen Cursorattributen finden Sie unter Cursormerkmale und Cursortyp.
SQL_ATTR_CURSOR_SENSITIVITY (ODBC 3.0) Ein SQLULEN-Wert, der angibt, ob Cursor auf dem Anweisungshandle die Änderungen sichtbar machen, die von einem anderen Cursor an einem Resultset vorgenommen wurden. Das Festlegen dieses Attributs wirkt sich auf nachfolgende Aufrufe von SQLExecDirect und SQLExecute aus. Eine Anwendung kann den Wert dieses Attributs zurücklesen, um den anfangs oder den zuletzt von der Anwendung festgelegten Zustand abzurufen.

SQL_UNSPECIFIED = Es ist nicht angegeben, was der Cursortyp ist und ob Cursor im Anweisungshandle die Änderungen sichtbar machen, die von einem anderen Cursor an einem Resultset vorgenommen wurden. Cursor auf dem Anweisungshandle können keine, einige oder alle änderungen sichtbar machen. Dies ist die Standardoption.

SQL_INSENSITIVE = Alle Cursor auf dem -Anweisungshandle zeigen das Resultset an, ohne änderungen widerzuspiegeln, die von einem anderen Cursor vorgenommen wurden. Nicht empfindliche Cursor sind schreibgeschützt. Dies entspricht einem statischen Cursor, der eine schreibgeschützte Parallelität aufweist.

SQL_SENSITIVE = Alle Cursor im Anweisungshandle machen alle Änderungen sichtbar, die von einem anderen Cursor an einem Resultset vorgenommen werden.

Weitere Informationen zur Beziehung zwischen SQL_ATTR_CURSOR_SENSITIVITY und den anderen Cursorattributen finden Sie unter Cursormerkmale und Cursortyp.
SQL_ATTR_CURSOR_TYPE (ODBC 2.0) Ein SQLULEN-Wert, der den Cursortyp angibt:

SQL_CURSOR_FORWARD_ONLY = Der Cursor scrollt nur nach vorne.

SQL_CURSOR_STATIC = Die Daten im Resultset sind statisch.

SQL_CURSOR_KEYSET_DRIVEN = Der Treiber speichert und verwendet die Schlüssel für die Anzahl der Zeilen, die im attribut SQL_ATTR_KEYSET_SIZE-Anweisung angegeben sind.

SQL_CURSOR_DYNAMIC = Der Treiber speichert und verwendet nur die Schlüssel für die Zeilen im Rowset.

Der Standardwert ist SQL_CURSOR_FORWARD_ONLY. Dieses Attribut kann nicht angegeben werden, nachdem die SQL-Anweisung vorbereitet wurde.

Wenn der angegebene Cursortyp von der Datenquelle nicht unterstützt wird, ersetzt der Treiber einen anderen Cursortyp und gibt SQLSTATE 01S02 (Optionswert geändert) zurück. Bei einem gemischten oder dynamischen Cursor ersetzt der Treiber in der Reihenfolge einen keysetgesteuerten oder statischen Cursor. Für einen keysetgesteuerten Cursor ersetzt der Treiber einen statischen Cursor.

Weitere Informationen zu scrollbaren Cursortypen finden Sie unter Scrollbare Cursortypen. Weitere Informationen zur Beziehung zwischen SQL_ATTR_CURSOR_TYPE und den anderen Cursorattributen finden Sie unter Cursormerkmale und Cursortyp.
SQL_ATTR_ENABLE_AUTO_IPD (ODBC 3.0) Ein SQLULEN-Wert, der angibt, ob die automatische Auffüllung der IPD ausgeführt wird:

SQL_TRUE = Aktiviert die automatische Auffüllung der IPD nach einem Aufruf von SQLPrepare. SQL_FALSE = Deaktiviert die automatische Auffüllung der IPD nach einem Aufruf von SQLPrepare. (Eine Anwendung kann weiterhin IPD-Feldinformationen abrufen, indem sie SQLDescribeParam aufruft, falls unterstützt.) Der Standardwert des SQL_ATTR_ENABLE_AUTO_IPD -Anweisungsattributs ist SQL_FALSE. Weitere Informationen finden Sie unter Automatische Auffüllung der IPD.
SQL_ATTR_FETCH_BOOKMARK_PTR (ODBC 3.0) Eine SQLLEN *, die auf einen binären Lesezeichenwert verweist. Wenn SQLFetchScroll mit fFetchOrientation gleich SQL_FETCH_BOOKMARK aufgerufen wird, übernimmt der Treiber den Wert der Lesezeichen aus diesem Feld. Dieses Feld ist standardmäßig auf einen NULL-Zeiger festgelegt. Weitere Informationen finden Sie unter Scrolling by Bookmark.

Der Wert, auf den dieses Feld verweist, wird nicht zum Löschen durch Lesezeichen, Aktualisieren durch Lesezeichen oder Abrufen von Lesezeichenvorgängen in SQLBulkOperations verwendet, bei denen Lesezeichen verwendet werden, die in Rowsetpuffern zwischengespeicherte Lesezeichen verwenden.
SQL_ATTR_IMP_PARAM_DESC (ODBC 3.0) Das Handle für die IPD. Der Wert dieses Attributs ist der Deskriptor, der bei der anfänglichen Zuordnung der Anweisung zugewiesen wurde. Dieses Attribut kann von der Anwendung nicht festgelegt werden.

Dieses Attribut kann durch einen Aufruf von SQLGetStmtAttr abgerufen, aber nicht durch einen Aufruf von SQLSetStmtAttr festgelegt werden.
SQL_ATTR_IMP_ROW_DESC (ODBC 3.0) Das Handle zum IRD. Der Wert dieses Attributs ist der Deskriptor, der bei der anfänglichen Zuordnung der Anweisung zugewiesen wurde. Dieses Attribut kann von der Anwendung nicht festgelegt werden.

Dieses Attribut kann durch einen Aufruf von SQLGetStmtAttr abgerufen, aber nicht durch einen Aufruf von SQLSetStmtAttr festgelegt werden.
SQL_ATTR_KEYSET_SIZE (ODBC 2.0) Ein SQLULEN-Element, das die Anzahl der Zeilen im Keyset für einen keysetgesteuerten Cursor angibt. Wenn die Keysetgröße 0 (Standard) ist, ist der Cursor vollständig keysetgesteuert. Wenn die Keysetgröße größer als 0 ist, wird der Cursor gemischt (keyset-gesteuert innerhalb des Keysets und dynamisch außerhalb des Keysets). Die Standardgröße des Keysets ist 0. Weitere Informationen zu keysetgesteuerten Cursorn finden Sie unter Keyset-Driven Cursors.

Wenn die angegebene Größe die maximale Keysetgröße überschreitet, ersetzt der Treiber diese Größe und gibt SQLSTATE 01S02 (Optionswert geändert) zurück.

SQLFetch oder SQLFetchScroll gibt einen Fehler zurück, wenn die Keysetgröße größer als 0 und kleiner als die Rowsetgröße ist.
SQL_ATTR_MAX_LENGTH (ODBC 1.0) Ein SQLULEN-Wert, der die maximale Datenmenge angibt, die der Treiber aus einer Zeichen- oder Binärspalte zurückgibt. Wenn ValuePtr kleiner als die Länge der verfügbaren Daten ist, schneidet SQLFetch oder SQLGetData die Daten ab und gibt SQL_SUCCESS zurück. Wenn ValuePtr 0 (Standardwert) ist, versucht der Treiber, alle verfügbaren Daten zurückzugeben.

Wenn die angegebene Länge kleiner als die Mindestmenge an Daten ist, die die Datenquelle zurückgeben kann, oder größer als die maximale Datenmenge, die von der Datenquelle zurückgegeben werden kann, ersetzt der Treiber diesen Wert und gibt SQLSTATE 01S02 (Optionswert geändert) zurück.

Der Wert dieses Attributs kann für einen geöffneten Cursor festgelegt werden. Die Einstellung wird jedoch möglicherweise nicht sofort wirksam. In diesem Fall gibt der Treiber SQLSTATE 01S02 (Optionswert geändert) zurück und setzt das Attribut auf den ursprünglichen Wert zurück.

Dieses Attribut soll den Netzwerkdatenverkehr reduzieren und sollte nur unterstützt werden, wenn es von der Datenquelle (im Gegensatz zum Treiber) in einem Treiber mit mehreren Ebenen implementiert werden kann. Dieser Mechanismus sollte von Anwendungen nicht zum Abschneiden von Daten verwendet werden. Um empfangene Daten abzuschneiden, sollte eine Anwendung die maximale Pufferlänge im BufferLength-Argument in SQLBindCol oder SQLGetData angeben.
SQL_ATTR_MAX_ROWS (ODBC 1.0) Ein SQLULEN-Wert, der der maximalen Anzahl von Zeilen entspricht, die für eine SELECT-Anweisung an die Anwendung zurückgegeben werden sollen. Wenn *ValuePtr gleich 0 (Standard) ist, gibt der Treiber alle Zeilen zurück.

Dieses Attribut soll den Netzwerkdatenverkehr reduzieren. Konzeptionell wird es angewendet, wenn das Resultset erstellt wird und das Resultset auf die ersten ValuePtr-Zeilen beschränkt wird. Wenn die Anzahl der Zeilen im Resultset größer als ValuePtr ist, wird das Resultset abgeschnitten.

SQL_ATTR_MAX_ROWS gilt für alle Resultsets in der Anweisung, einschließlich der von Katalogfunktionen zurückgegebenen. SQL_ATTR_MAX_ROWS legt ein Maximum für den Wert der Cursorzeilenanzahl fest.

Ein Treiber sollte nicht SQL_ATTR_MAX_ROWS Verhalten für SQLFetch oder SQLFetchScroll emulieren (wenn die Größeneinschränkungen des Resultsets an der Datenquelle nicht implementiert werden können), wenn er nicht garantieren kann, dass SQL_ATTR_MAX_ROWS ordnungsgemäß implementiert wird.

Es wird vom Treiber definiert, ob SQL_ATTR_MAX_ROWS für andere Anweisungen als SELECT-Anweisungen (z. B. Katalogfunktionen) gilt.

Der Wert dieses Attributs kann für einen geöffneten Cursor festgelegt werden. Die Einstellung wird jedoch möglicherweise nicht sofort wirksam. In diesem Fall gibt der Treiber SQLSTATE 01S02 (Optionswert geändert) zurück und setzt das Attribut auf den ursprünglichen Wert zurück.
SQL_ATTR_METADATA_ID (ODBC 3.0) Ein SQLULEN-Wert, der bestimmt, wie die Zeichenfolgenargumente von Katalogfunktionen behandelt werden.

Wenn SQL_TRUE, werden das Zeichenfolgenargument von Katalogfunktionen als Bezeichner behandelt. Der Fall ist nicht signifikant. Bei nicht begrenzten Zeichenfolgen entfernt der Treiber alle nachfolgenden Leerzeichen, und die Zeichenfolge wird in Großbuchstaben gefaltet. Bei durch Trennzeichen getrennten Zeichenfolgen entfernt der Treiber alle führenden oder nachfolgenden Leerzeichen und nimmt das, was sich zwischen den Trennzeichen befindet, wörtlich. Wenn eines dieser Argumente auf einen NULL-Zeiger festgelegt ist, gibt die Funktion SQL_ERROR und SQLSTATE HY009 (Ungültige Verwendung von NULL-Zeiger) zurück.

Wenn SQL_FALSE, werden die Zeichenfolgenargumente von Katalogfunktionen nicht als Bezeichner behandelt. Der Fall ist bezeichnend. Sie können je nach Argument entweder ein Zeichenfolgensuchmuster enthalten oder nicht.

Der Standardwert ist SQL_FALSE.

Das TableType-Argument von SQLTables, das eine Liste von Werten akzeptiert, ist von diesem Attribut nicht betroffen.

SQL_ATTR_METADATA_ID können auch auf Verbindungsebene festgelegt werden. (Es und SQL_ATTR_ASYNC_ENABLE sind die einzigen Anweisungsattribute, die auch Verbindungsattribute sind.)

Weitere Informationen finden Sie unter Argumente in Katalogfunktionen.
SQL_ATTR_NOSCAN (ODBC 1.0) Ein SQLULEN-Wert, der angibt, ob der Treiber SQL-Zeichenfolgen auf Escapesequenzen überprüfen soll:

SQL_NOSCAN_OFF = Der Treiber überprüft SQL-Zeichenfolgen auf Escapesequenzen (Standard).

SQL_NOSCAN_ON = Der Treiber überprüft SQL-Zeichenfolgen nicht auf Escapesequenzen. Stattdessen sendet der Treiber die Anweisung direkt an die Datenquelle.

Weitere Informationen finden Sie unter Escapesequenzen in ODBC.
SQL_ATTR_PARAM_BIND_OFFSET_PTR (ODBC 3.0) Ein SQLULEN *-Wert, der auf einen Offset verweist, der Zeigern hinzugefügt wird, um die Bindung dynamischer Parameter zu ändern. Wenn dieses Feld ungleich NULL ist, leitet der Treiber den Zeiger ab, fügt jedem der zurückgestellten Felder im Deskriptordatensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) den deferenten Wert hinzu und verwendet die neuen Zeigerwerte bei der Bindung. Sie ist standardmäßig auf NULL festgelegt.

Der Bindungsoffset wird immer direkt den Feldern SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR hinzugefügt. Wenn der Offset in einen anderen Wert geändert wird, wird der neue Wert weiterhin direkt dem Wert im Deskriptorfeld hinzugefügt. Der neue Offset wird dem Feldwert und keinem früheren Offset hinzugefügt.

Weitere Informationen finden Sie unter Parameterbindungsoffsets.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_BIND_OFFSET_PTR im APD-Header festgelegt.
SQL_ATTR_PARAM_BIND_TYPE (ODBC 3.0) Ein SQLULEN-Wert, der die Bindungsausrichtung angibt, die für dynamische Parameter verwendet werden soll.

Dieses Feld ist auf SQL_PARAM_BIND_BY_COLUMN (Standard) festgelegt, um eine spaltenweise Bindung auszuwählen.

Um zeilenweise Bindung auszuwählen, wird dieses Feld auf die Länge der Struktur oder einer Instanz eines Puffers festgelegt, die an einen Satz dynamischer Parameter gebunden wird. Diese Länge muss Platz für alle gebundenen Parameter und alle Auffüllungen der Struktur oder des Puffers enthalten, um sicherzustellen, dass das Ergebnis auf den Anfang desselben Parameters im nächsten Parametersatz verweist, wenn die Adresse eines gebundenen Parameters mit der angegebenen Länge erhöht wird. Wenn Sie den Operator sizeof in ANSI C verwenden, ist dieses Verhalten garantiert.

Weitere Informationen finden Sie unter Binden von Parameterarrays.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ BIND_TYPE im APD-Header festgelegt.
SQL_ATTR_PARAM_OPERATION_PTR (ODBC 3.0) Ein SQLUSMALLINT *-Wert, der auf ein Array von SQLUSMALLINT-Werten verweist, die verwendet werden, um einen Parameter während der Ausführung einer SQL-Anweisung zu ignorieren. Jeder Wert wird entweder auf SQL_PARAM_PROCEED (für den auszuführenden Parameter) oder auf SQL_PARAM_IGNORE (für den zu ignorierenden Parameter) festgelegt.

Ein Satz von Parametern kann während der Verarbeitung ignoriert werden, indem der Statuswert in dem Array festgelegt wird, auf das von SQL_DESC_ARRAY_STATUS_PTR in der APD auf SQL_PARAM_IGNORE verwiesen wird. Ein Satz von Parametern wird verarbeitet, wenn der Statuswert auf SQL_PARAM_PROCEED festgelegt ist oder wenn keine Elemente im Array festgelegt sind.

Dieses Anweisungsattribut kann auf einen NULL-Zeiger festgelegt werden. In diesem Fall gibt der Treiber keine Parameterstatuswerte zurück. Dieses Attribut kann jederzeit festgelegt werden, aber der neue Wert wird erst verwendet, wenn SQLExecDirect oder SQLExecute das nächste Mal aufgerufen wird.

Dieses Attribut wird ignoriert, wenn kein gebundener Parameter vorhanden ist.

Weitere Informationen finden Sie unter Verwenden von Parameterarrays.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_STATUS_PTR im APD-Header festgelegt.
SQL_ATTR_PARAM_STATUS_PTR (ODBC 3.0) Ein SQLUSMALLINT *-Wert, der auf ein Array von SQLUSMALLINT-Werten verweist, die Statusinformationen für jede Zeile von Parameterwerten nach einem Aufruf von SQLExecute oder SQLExecDirect enthalten. Dieses Feld ist nur erforderlich, wenn PARAMSET_SIZE größer als 1 ist.

Die Statuswerte können die folgenden Werte enthalten:

SQL_PARAM_SUCCESS: Die SQL-Anweisung wurde für diesen Parametersatz erfolgreich ausgeführt.

SQL_PARAM_SUCCESS_WITH_INFO: Die SQL-Anweisung wurde für diesen Parametersatz erfolgreich ausgeführt. Warnungsinformationen sind jedoch in der Struktur der Diagnosedaten verfügbar.

SQL_PARAM_ERROR: Es ist ein Fehler bei der Verarbeitung dieses Parameterssatzes aufgetreten. Zusätzliche Fehlerinformationen sind in der Diagnosedatenstruktur verfügbar.

SQL_PARAM_UNUSED: Dieser Parametersatz wurde nicht verwendet, möglicherweise aufgrund der Tatsache, dass ein vorheriger Parametersatz einen Fehler verursacht hat, der die weitere Verarbeitung abbricht, oder weil SQL_PARAM_IGNORE für diesen Satz von Parametern in dem vom SQL_ATTR_PARAM_OPERATION_PTR angegebenen Array festgelegt wurde.

SQL_PARAM_DIAG_UNAVAILABLE: Der Treiber behandelt Arrays von Parametern als monolithische Einheit und generiert daher nicht diese Ebene von Fehlerinformationen.

Dieses Anweisungsattribut kann auf einen NULL-Zeiger festgelegt werden. In diesem Fall gibt der Treiber keine Parameterstatuswerte zurück. Dieses Attribut kann jederzeit festgelegt werden, aber der neue Wert wird erst verwendet, wenn SQLExecute oder SQLExecDirect das nächste Mal aufgerufen wird. Beachten Sie, dass sich das Festlegen dieses Attributs auf das vom Treiber implementierte Ausgabeparameterverhalten auswirken kann.

Weitere Informationen finden Sie unter Verwenden von Parameterarrays.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_STATUS_PTR im IPD-Header festgelegt.
SQL_ATTR_PARAMS_PROCESSED_PTR (ODBC 3.0) Ein SQLULEN *-Datensatzfeld, das auf einen Puffer verweist, in dem die Anzahl der verarbeiteten Parametersätze zurückgegeben werden soll, einschließlich Fehlersätzen. Es wird keine Zahl zurückgegeben, wenn es sich um einen NULL-Zeiger handelt.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ROWS_PROCESSED_PTR im IPD-Header festgelegt.

Wenn der Aufruf von SQLExecDirect oder SQLExecute , der den Puffer füllt, auf den dieses Attribut verweist, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, ist der Inhalt des Puffers nicht definiert.

Weitere Informationen finden Sie unter Verwenden von Parameterarrays.
SQL_ATTR_PARAMSET_SIZE (ODBC 3.0) Ein SQLULEN-Wert, der die Anzahl der Werte für jeden Parameter angibt. Wenn SQL_ATTR_PARAMSET_SIZE größer als 1 ist, zeigen SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR der APD auf Arrays. Die Kardinalität jedes Arrays ist gleich dem Wert dieses Felds.

Dieses Attribut wird ignoriert, wenn kein gebundener Parameter vorhanden ist.

Weitere Informationen finden Sie unter Verwenden von Parameterarrays.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_SIZE im APD-Header festgelegt.
SQL_ATTR_QUERY_TIMEOUT (ODBC 1.0) Ein SQLULEN-Wert, der der Anzahl von Sekunden entspricht, die auf die Ausführung einer SQL-Anweisung gewartet werden muss, bevor sie zur Anwendung zurückkehrt. Wenn ValuePtr gleich 0 (Standard) ist, gibt es kein Timeout.

Wenn das angegebene Timeout das maximale Timeout in der Datenquelle überschreitet oder kleiner als das minimale Timeout ist, ersetzt SQLSetStmtAttr diesen Wert und gibt SQLSTATE 01S02 zurück (Optionswert geändert).

Beachten Sie, dass die Anwendung SQLCloseCursor nicht aufrufen muss, um die Anweisung wiederzuverwenden, wenn für eine SELECT-Anweisung ein Timeout auftritt.

Das Abfragetimeout in diesem Anweisungsattribut ist sowohl im synchronen als auch im asynchronen Modus gültig.
SQL_ATTR_RETRIEVE_DATA (ODBC 2.0) Ein SQLULEN-Wert:

SQL_RD_ON = SQLFetchScroll und in ODBC 3.x ruft SQLFetch Daten ab, nachdem der Cursor an der angegebenen Position positioniert wurde. Dies ist die Standardoption.

SQL_RD_OFF = SQLFetchScroll und in ODBC 3.x ruft SQLFetch keine Daten ab, nachdem der Cursor positioniert wurde.

Durch Festlegen SQL_RETRIEVE_DATA auf SQL_RD_OFF kann eine Anwendung überprüfen, ob eine Zeile vorhanden ist, oder ein Lesezeichen für die Zeile abrufen, ohne dass der Mehraufwand beim Abrufen von Zeilen entsteht. Weitere Informationen finden Sie unter Scrollen und Abrufen von Zeilen.

Der Wert dieses Attributs kann auf einem geöffneten Cursor festgelegt werden. Die Einstellung wird jedoch möglicherweise nicht sofort wirksam. In diesem Fall gibt der Treiber SQLSTATE 01S02 (Geänderter Optionswert) zurück und setzt das Attribut auf den ursprünglichen Wert zurück.
SQL_ATTR_ROW_ARRAY_SIZE (ODBC 3.0) Ein SQLULEN-Wert, der die Anzahl der Zeilen angibt, die von jedem Aufruf von SQLFetch oder SQLFetchScroll zurückgegeben werden. Dies ist auch die Anzahl der Zeilen in einem Lesezeichenarray, die in einem Massenlesevorgang in SQLBulkOperations verwendet wird. Der Standardwert ist 1.

Wenn die angegebene Rowsetgröße die maximale Rowsetgröße überschreitet, die von der Datenquelle unterstützt wird, ersetzt der Treiber diesen Wert und gibt SQLSTATE 01S02 zurück (Optionswert geändert).

Weitere Informationen finden Sie unter Rowsetgröße.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_SIZE im ARD-Header festgelegt.
SQL_ATTR_ROW_BIND_OFFSET_PTR (ODBC 3.0) Ein SQLULEN *-Wert, der auf einen Offset verweist, der zeigern hinzugefügt wird, um die Bindung von Spaltendaten zu ändern. Wenn dieses Feld ungleich NULL ist, dereferenziert der Treiber den Zeiger, fügt jedem der verzögerten Felder im Deskriptordatensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) den dereferenzierten Wert hinzu und verwendet beim Binden die neuen Zeigerwerte. Sie ist standardmäßig auf NULL festgelegt.

Durch Festlegen dieses Anweisungsattributs wird das SQL_DESC_BIND_OFFSET_PTR Feld im ARD-Header festgelegt.
SQL_ATTR_ROW_BIND_TYPE (ODBC 1.0) Ein SQLULEN-Wert, der die Bindungsausrichtung festlegt, die verwendet werden soll, wenn SQLFetch oder SQLFetchScroll für die zugeordnete Anweisung aufgerufen wird. Die spaltenweise Bindung wird ausgewählt, indem der Wert auf SQL_BIND_BY_COLUMN festgelegt wird. Die zeilenweise Bindung wird ausgewählt, indem der Wert auf die Länge einer Struktur oder einer Instanz eines Puffers festgelegt wird, an die Ergebnisspalten gebunden werden.

Wenn eine Länge angegeben wird, muss sie Leerzeichen für alle gebundenen Spalten und alle Auffüllungen der Struktur oder des Puffers enthalten, um sicherzustellen, dass das Ergebnis auf den Anfang derselben Spalte in der nächsten Zeile verweist, wenn die Adresse einer gebundenen Spalte mit der angegebenen Länge erhöht wird. Wenn Sie den Sizeof-Operator mit Strukturen oder Unions in ANSI C verwenden, ist dieses Verhalten garantiert.

Spaltenbasierte Bindung ist die Standardbindungsausrichtung für SQLFetch und SQLFetchScroll.

Weitere Informationen finden Sie unter Binden von Spalten für die Verwendung mit Blockcursors.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_BIND_TYPE im ARD-Header festgelegt.
SQL_ATTR_ROW_NUMBER (ODBC 2.0) Ein SQLULEN-Wert, der die Nummer der aktuellen Zeile im gesamten Resultset darstellt. Wenn die Nummer der aktuellen Zeile nicht bestimmt werden kann oder keine aktuelle Zeile vorhanden ist, gibt der Treiber 0 zurück.

Dieses Attribut kann durch einen Aufruf von SQLGetStmtAttr abgerufen, aber nicht durch einen Aufruf von SQLSetStmtAttr festgelegt werden.
SQL_ATTR_ROW_OPERATION_PTR (ODBC 3.0) Ein SQLUSMALLINT *-Wert, der auf ein Array von SQLUSMALLINT-Werten verweist, die verwendet werden, um eine Zeile während eines Massenvorgangs mit SQLSetPos zu ignorieren. Jeder Wert wird entweder auf SQL_ROW_PROCEED (für die Zeile, die in den Massenvorgang eingeschlossen werden soll) oder auf SQL_ROW_IGNORE (für die Zeile, die vom Massenvorgang ausgeschlossen werden soll) festgelegt. (Zeilen können nicht ignoriert werden, wenn dieses Array bei Aufrufen von SQLBulkOperations verwendet wird.)

Dieses Anweisungsattribut kann auf einen NULL-Zeiger festgelegt werden. In diesem Fall gibt der Treiber keine Zeilenstatuswerte zurück. Dieses Attribut kann jederzeit festgelegt werden, aber der neue Wert wird erst verwendet, wenn SQLSetPos das nächste Mal aufgerufen wird.

Weitere Informationen finden Sie unter Aktualisieren von Zeilen im Rowset mit SQLSetPos und Löschen von Zeilen im Rowset mit SQLSetPos.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_STATUS_PTR in der ARD festgelegt.
SQL_ATTR_ROW_STATUS_PTR (ODBC 3.0) Ein SQLUSMALLINT *-Wert, der nach einem Aufruf von SQLFetch oder SQLFetchScroll auf ein Array von SQLUSMALLINT-Werten zeigt, die Zeilenstatuswerte enthalten. Das Array enthält so viele Elemente, wie zeilen im Rowset vorhanden sind.

Dieses Anweisungsattribut kann auf einen NULL-Zeiger festgelegt werden. In diesem Fall gibt der Treiber keine Zeilenstatuswerte zurück. Dieses Attribut kann jederzeit festgelegt werden, aber der neue Wert wird erst verwendet, wenn SQLBulkOperations, SQLFetch, SQLFetchScroll oder SQLSetPos das nächste Mal aufgerufen wird.

Weitere Informationen finden Sie unter Anzahl der abgerufenen Zeilen und Status.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_STATUS_PTR im IRD-Header festgelegt.

Dieses Attribut wird von einem ODBC 2.x-Treiber dem array rgbRowStatus in einem Aufruf von SQLExtendedFetch zugeordnet.
SQL_ATTR_ROWS_FETCHED_PTR (ODBC 3.0) Ein SQLULEN *-Wert, der auf einen Puffer zeigt, in dem die Anzahl der Zeilen zurückgegeben werden soll, die nach einem Aufruf von SQLFetch oder SQLFetchScroll abgerufen wurden; die Anzahl der Zeilen, die von einem Massenvorgang betroffen sind, der durch einen Aufruf von SQLSetPos mit dem Argument Operation SQL_REFRESH; oder die Anzahl der Zeilen, die von einem von SQLBulkOperations ausgeführten Massenvorgang betroffen sind. Diese Zahl enthält Fehlerzeilen.

Weitere Informationen finden Sie unter Anzahl der abgerufenen Zeilen und Status.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ROWS_PROCESSED_PTR im IRD-Header festgelegt.

Wenn der Aufruf von SQLFetch oder SQLFetchScroll , der den Puffer ausfüllt, auf den dieses Attribut verweist, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, ist der Inhalt des Puffers nicht definiert.
SQL_ATTR_SIMULATE_CURSOR (ODBC 2.0) Ein SQLULEN-Wert, der angibt, ob Treiber, die positionierte Update- und Löschanweisungen simulieren, garantieren, dass solche Anweisungen nur eine einzelne Zeile betreffen.

Um positionierte Update- und Delete-Anweisungen zu simulieren, erstellen die meisten Treiber eine durchsuchte UPDATE- oder DELETE-Anweisung mit einer WHERE-Klausel, die den Wert jeder Spalte in der aktuellen Zeile angibt. Sofern diese Spalten keinen eindeutigen Schlüssel bilden, kann sich eine solche Anweisung auf mehr als eine Zeile auswirken.

Um sicherzustellen, dass solche Anweisungen nur eine Zeile betreffen, bestimmt der Treiber die Spalten in einem eindeutigen Schlüssel und fügt diese Spalten dem Resultset hinzu. Wenn eine Anwendung garantiert, dass die Spalten im Resultset einen eindeutigen Schlüssel bilden, ist der Treiber dazu nicht erforderlich. Dies kann die Ausführungszeit verkürzen.

SQL_SC_NON_UNIQUE = Der Treiber garantiert nicht, dass sich simulierte positionierte Update- oder Löschanweisungen nur auf eine Zeile auswirken; dafür ist die Anwendung zuständig. Wenn eine Anweisung mehr als eine Zeile betrifft, gibt SQLExecute, SQLExecDirect oder SQLSetPos SQLSTATE 01001 (Cursorvorgangskonflikt) zurück.

SQL_SC_TRY_UNIQUE = Der Treiber versucht sicherzustellen, dass simulierte positionierte Update- oder Löschanweisungen nur eine Zeile betreffen. Der Treiber führt solche Anweisungen immer aus, auch wenn sie sich möglicherweise auf mehr als eine Zeile auswirken können, z. B. wenn kein eindeutiger Schlüssel vorhanden ist. Wenn eine Anweisung mehr als eine Zeile betrifft, gibt SQLExecute, SQLExecDirect oder SQLSetPos SQLSTATE 01001 (Cursorvorgangskonflikt) zurück.

SQL_SC_UNIQUE = Der Treiber garantiert, dass sich simulierte positionierte Update- oder Delete-Anweisungen nur auf eine Zeile auswirken. Wenn der Treiber dies für eine bestimmte Anweisung nicht garantieren kann, gibt SQLExecDirect oder SQLPrepare einen Fehler zurück.

Wenn die Datenquelle native SQL-Unterstützung für positionierte Update- und Löschanweisungen bereitstellt und der Treiber keine Cursor simuliert, wird SQL_SUCCESS zurückgegeben, wenn SQL_SC_UNIQUE für SQL_SIMULATE_CURSOR angefordert wird. SQL_SUCCESS_WITH_INFO wird zurückgegeben, wenn SQL_SC_TRY_UNIQUE oder SQL_SC_NON_UNIQUE angefordert wird. Wenn die Datenquelle die SQL_SC_TRY_UNIQUE Unterstützungsebene bereitstellt und der Treiber dies nicht, wird SQL_SUCCESS für SQL_SC_TRY_UNIQUE zurückgegeben, und SQL_SUCCESS_WITH_INFO wird für SQL_SC_NON_UNIQUE zurückgegeben.

Wenn der angegebene Cursorsimulationstyp von der Datenquelle nicht unterstützt wird, ersetzt der Treiber einen anderen Simulationstyp und gibt SQLSTATE 01S02 (Optionswert geändert) zurück. Für SQL_SC_UNIQUE ersetzt der Fahrer in der Reihenfolge SQL_SC_TRY_UNIQUE oder SQL_SC_NON_UNIQUE. Für SQL_SC_TRY_UNIQUE ersetzt der Fahrer SQL_SC_NON_UNIQUE.

Der Standardwert ist SQL_SC_UNIQUE.

Weitere Informationen finden Sie unter Simulieren positionierter Update- und Delete-Anweisungen.
SQL_ATTR_USE_BOOKMARKS (ODBC 2.0) Ein SQLULEN-Wert, der angibt, ob eine Anwendung Lesezeichen mit einem Cursor verwendet:

SQL_UB_OFF = Aus (Standard)

SQL_UB_VARIABLE = Eine Anwendung verwendet Lesezeichen mit einem Cursor, und der Treiber stellt Lesezeichen mit variabler Länge bereit, sofern diese unterstützt werden. SQL_UB_FIXED ist in ODBC 3.x veraltet. ODBC 3.x-Anwendungen sollten immer Lesezeichen mit variabler Länge verwenden, auch wenn sie mit ODBC 2.x-Treibern arbeiten (die nur Lesezeichen mit fester Länge mit 4 Byte unterstützt haben). Dies liegt daran, dass ein Lesezeichen mit fester Länge nur ein Sonderfall eines Lesezeichens mit variabler Länge ist. Wenn Sie mit einem ODBC 2.x-Treiber arbeiten, ordnet der Treiber-Manager SQL_UB_VARIABLE SQL_UB_FIXED zu.

Um Lesezeichen mit einem Cursor zu verwenden, muss die Anwendung dieses Attribut mit dem wert SQL_UB_VARIABLE angeben, bevor der Cursor geöffnet wird.

Weitere Informationen finden Sie unter Abrufen von Lesezeichen.

[1] Diese Funktionen können nur asynchron aufgerufen werden, wenn der Deskriptor ein Implementierungsdeskriptor und kein Anwendungsdeskriptor ist.

Weitere Informationen finden Sie unter Spaltenbasierte Bindung und zeilenweise Bindung.

Informationen über Finden Sie unter
Abbrechen der Anweisungsverarbeitung SQLCancel-Funktion
Zurückgeben der Einstellung eines Verbindungsattributes SQLGetConnectAttr-Funktion
Zurückgeben der Einstellung eines Anweisungsattributs SQLGetStmtAttr-Funktion
Festlegen eines Verbindungsattributes SQLSetConnectAttr-Funktion
Festlegen eines einzelnen Felds des Deskriptors SQLSetDescField-Funktion

Weitere Informationen

ODBC-API-Referenz
ODBC-Headerdateien