SQLSetStmtAttr-Funktion

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

Zusammenfassung
SQLSetStmtAttr legt Attribute im Zusammenhang mit einer Anweisung fest.

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 Mapping Replacement Functions for Backward Compatibility of Applications.For more information about what the Driver Manager maps this function to when an ODBC 3.x application is working with an ODBC 2.x driver, see Mapping Replacement Functions for Backward Compatibility of Applications.

Syntax

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

Argumente

StatementHandle
[Eingabe] Anweisungshandle.

Attribut
[Eingabe] Option zum Festlegen, in "Kommentare" aufgeführt.

ValuePtr
[Eingabe] Wert, der dem Attribut zugeordnet werden soll. Abhängig vom Wert des Attributs ist ValuePtr einer der folgenden:

  • Ein ODBC-Deskriptor-Handle.

  • Ein SQLUINTEGER-Wert.

  • Ein SQLULEN-Wert.

  • Ein Zeiger auf einen der folgenden Optionen:

    • Eine mit Null beendete Zeichenfolge.

    • Ein binärer Puffer.

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

    • Ein treiberdefinierter Wert.

Wenn das Attributargument ein treiberspezifischer Wert ist, kann ValuePtr eine signierte ganze Zahl sein.

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

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

  • 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(länge) 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, je nach Bedarf.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnostik

Wenn SQLSetStmtAttr 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 SQLSetStmtAttr 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.)
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 ermitteln.) 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_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 war 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 dessen Ursache.
HY001 Speicherzuweisungsfehler Der Treiber konnte speicher nicht zuordnen, der erforderlich ist, um die Ausführung oder den Abschluss der Funktion zu unterstützen.
HY009 Ungültige Verwendung des Nullzeigers Das Argument "Attribut " hat ein Anweisungsattribut identifiziert, das ein Zeichenfolgenattribute erforderte, und das Argument ValuePtr war ein NULL-Zeiger .
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 SQLSetStmtAttr-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 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 ausführungsparametern 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 vorbereitet.
HY013 Speicherverwaltungsfehler Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen.
HY017 Ungültige Verwendung eines automatisch zugewiesenen Deskriptorhandle (DM) Das Attributargument wurde SQL_ATTR_IMP_ROW_DESC oder SQL_ATTR_IMP_PARAM_DESC.

(DM) Das Attributargument war SQL_ATTR_APP_ROW_DESC oder SQL_ATTR_APP_PARAM_DESC, und der Wert in ValuePtr war ein implizit zugewiesener Deskriptorhandle, das nicht dem handle, der ursprünglich für die ARD oder APD zugewiesen wurde.
HY024 Ungültiger Attributwert Aufgrund des angegebenen Attributwerts wurde in ValuePtr ein ungültiger Wert angegeben. (Der Treiber-Manager gibt diesen SQLSTATE nur für Verbindungs- und Anweisungsattribute zurück, die einen separaten Wertesatz 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 Attributargument war SQL_ATTR_APP_ROW_DESC oder SQL_ATTR_APP_PARAM_DESC, und ValuePtr war ein explizit zugewiesenes Deskriptorhandle, das sich nicht in derselben Verbindung wie das Argument "StatementHandle " befindet.
HY090 Ungültige Zeichenfolgen- oder Pufferlänge (DM) *ValuePtr ist eine Zeichenfolge, und das Argument StringLength war kleiner als 0, aber nicht SQL_NTS.
HY092 Ungültiger Attribut-/Optionsbezeichner (DM) Der für das Argumentattribut 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 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 Der für das Argumentattribut angegebene Wert war ein gültiges ODBC-Anweisungsattribut für die vom Treiber unterstützte VERSION von ODBC, wurde jedoch vom Treiber nicht unterstützt.

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

Das Attributargument 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 SQL_ATTR_CONNECTION_TIMEOUT festgelegt.
IM001 Dieser Treiber unterstützt diese Funktion nicht. (DM) Der dem 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 Benachrichtigung wird vom Treiber nicht unterstützt.

Kommentare

Anweisungsattribute für eine Anweisung bleiben wirksam, bis sie von einem anderen Aufruf von SQLSetStmtAttr geändert werden oder bis die Anweisung durch Aufrufen von SQLFreeHandle gelöscht wird. Das Aufrufen von SQLFreeStmt mit den Attributen SQL_CLOSE, SQL_UNBIND oder SQL_RESET_PARAMS Option setzt keine Anweisungsattribute zurück.

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 zurück (Optionswert geändert). Wenn "Attribute" beispielsweise SQL_ATTR_CONCURRENCY und ValuePtr 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 ermitteln, 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: eine Zeichenfolge oder einen ganzzahligen Wert. Das Format der einzelnen Wird in der Beschreibung des Attributs angegeben. Dieses Format gilt für die Informationen, die für jedes Attribut in SQLGetStmtAttr zurückgegeben werden. Zeichenzeichenfolgen, auf die das ValuePtr-Argument von SQLSetStmtAttr verweist, weisen eine Länge von StringLength auf.

Hinweis

Die Möglichkeit zum Festlegen von Anweisungsattributen auf Verbindungsebene durch Aufrufen von SQLSetConnectAttr 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 Attribute, die sowohl Verbindungsattribute als auch Anweisungsattribute sind und entweder auf Verbindungsebene oder auf Anweisungsebene festgelegt werden können.

Hinweis

ODBC 3.x-Treiber benötigen diese Funktionalität nur, wenn sie mit ODBC 2.x-Anwendungen arbeiten sollten, die ODBC 2.x-Anweisungsoptionen auf Verbindungsebene festlegen. Weitere Informationen finden Sie unter "Setting Statement Options on the Connection Level" unter SQLSetConnectOption Mapping in Anhang G: Treiberrichtlinien für Abwärtskompatibilität.

Anweisungsattribute, die Deskriptorfelder festlegen

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

Achtung

Das Aufrufen von SQLSetStmtAttr für eine Anweisung kann sich auf andere Anweisungen auswirken. Dies geschieht, wenn die APD oder ARD, die der Erklärung zugeordnet ist, explizit zugeordnet und auch mit anderen Aussagen verknüpft 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 (durch Aufrufen von SQLSetStmtAttr, um das feld SQL_ATTR_APP_ROW_DESC oder SQL_ATTR_APP_PARAM_DESC Feld auf ein anderes Beschreibungshandle festzulegen), bevor SQLSetStmtAttr erneut aufgerufen wird.

Wenn ein Deskriptorfeld als Ergebnis des festzulegenden entsprechenden Anweisungsattributs festgelegt wird, wird das Feld nur für die anwendbaren Deskriptoren festgelegt, die derzeit mit der vom Argument StatementHandle identifizierten Anweisung verknüpft sind, und die Attributeinstellung hat keine Auswirkungen auf Deskriptoren, 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 zugewiesener Deskriptor von einer Anweisung getrennt wird, wird ein Anweisungsattribut, das einem Kopfzeilenfeld entspricht, auf den Wert des Felds im implizit zugewiesenen Deskriptor zurückgesetzt.

Wenn eine Anweisung zugewiesen wird (siehe SQLAllocHandle), werden automatisch vier Deskriptorhandles zugewiesen und der Anweisung zugeordnet. Explizit zugewiesene 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 Feld „Kopfzeile“ 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 aus Open Group reservieren. Weitere Informationen finden Sie unter treiberspezifische Datentypen, Beschreibungstypen, Informationstypen, Diagnosetypen und Attribute.

Attribut ValuePtr-Inhalt
SQL_ATTR_APP_PARAM_DESC (ODBC 3.0) Das Handle an die APD für nachfolgende Aufrufe von SQLExecute und SQLExecDirect für das Anweisungshandle. Der Anfangswert dieses Attributs ist der implizit zugewiesene Deskriptor, wenn die Anweisung anfangs zugewiesen 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 zugewiesenes APD-Handle, das zuvor dem Anweisungshandle zugeordnet war, davon getrennt, und das Anweisungshandle wird auf das implizit zugewiesene APD-Handle zurückgesetzt.

Dieses Attribut kann nicht auf ein Deskriptorhandle festgelegt werden, das implizit für eine andere Anweisung oder einem anderen Deskriptorhandle zugewiesen wurde, das implizit für dieselbe Anweisung festgelegt wurde; Implizit zugewiesene Deskriptorhandles können nicht mehreren Anweisungs- oder Deskriptorhandles zugeordnet werden.
SQL_ATTR_APP_ROW_DESC (ODBC 3.0) Der Griff zur ARD für nachfolgende Abrufe auf den Anweisungshandle. Der Anfangswert dieses Attributs ist der implizit zugewiesene Deskriptor, wenn die Anweisung anfangs zugewiesen wurde. Wenn der Wert dieses Attributs auf SQL_NULL_DESC oder den ursprünglich für den Deskriptor zugewiesenen Handle festgelegt ist, wird ein explizit zugewiesenes ARD-Handle, das zuvor mit dem Anweisungshandle verknüpft war, davon getrennt und der Anweisungshandle wird auf den implizit zugeordneten ARD-Handle zurückgesetzt.

Dieses Attribut kann nicht auf ein Deskriptorhandle festgelegt werden, das implizit für eine andere Anweisung oder einem anderen Deskriptorhandle zugewiesen wurde, das implizit für dieselbe Anweisung festgelegt wurde; Implizit zugewiesene Deskriptorhandles können nicht mehreren Anweisungs- oder Deskriptorhandles zugeordnet werden.
SQL_ATTR_ASYNC_ENABLE (ODBC 1.0) Ein SQLULEN-Wert, der angibt, ob eine funktion, die mit der angegebenen Anweisung aufgerufen wird, 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 (Polling-Methode).For more information, see Asynchronous Execution (Polling Method).

Bei Treibern mit asynchroner Ausführungsunterstützung auf Anweisungsebene ist das Anweisungsattribut schreibgeschützt SQL_ATTR_ASYNC_ENABLE. Der Wert ist identisch mit dem Wert des Attributs auf Verbindungsebene mit demselben Namen zum Zeitpunkt der Zuweisung des Anweisungshandles.

Wird SQLSetStmtAttr aufgerufen, 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 Function" .
SQL_ATTR_ASYNC_STMT_EVENT (ODBC 3.8) Ein SQLPOINTER-Wert, der ein Ereignishandle ist.

Die Benachrichtigung über den Abschluss asynchroner Funktionen wird durch Aufrufen von SQLSetStmtAttr aktiviert, um das attribut SQL_ATTR_ASYNC_STMT_EVENT festzulegen und das Ereignishandle anzugeben.
SQL_ATTR_ASYNC_STMT_PCALLBACK (ODBC 3.8) Ein SQLPOINTER zur asynchronen Rückruffunktion.

Nur der Treiber-Manager kann die SQLSetStmtAttr-Funktion eines Treibers mit diesem Attribut aufrufen.
SQL_ATTR_ASYNC_STMT_PCONTEXT (ODBC 3.8) SQLPOINTER zur 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 Cursorkoncurrency angibt:

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

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

SQL_CONCUR_ROWVER = Cursor verwendet optimistisches Parallelitätssteuerelement, vergleicht Zeilenversionen wie SQLBase ROWID oder Sybase TIMESTAMP.

SQL_CONCUR_VALUES = Cursor verwendet optimistisches Parallelitätssteuerelement, wobei Werte verglichen werden.

Der Standardwert für SQL_ATTR_CONCURRENCY ist SQL_CONCUR_READ_ONLY.

Dieses Attribut kann für einen geöffneten Cursor nicht 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 bestimmten 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 zurück (Optionswert geändert). Für 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ührung ü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 den 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 Standardeinstellung.

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

Weitere Informationen zu bildlauffähigen 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 an einem Resultset vorgenommenen Änderungen durch einen anderen Cursor sichtbar machen. 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 Anfangszustand oder den Status abzurufen, wie zuletzt von der Anwendung festgelegt.

SQL_UNSPECIFIED = Es ist nicht angegeben, was der Cursortyp ist und ob Cursor auf dem Anweisungshandle die Änderungen sichtbar machen, die an einem Resultset von einem anderen Cursor vorgenommen wurden. Cursor auf dem Anweisungshandle machen möglicherweise keine, einige oder alle derartigen Änderungen sichtbar. Dies ist die Standardeinstellung.

SQL_INSENSITIVE = Alle Cursor auf dem Anweisungshandle zeigen das Resultset an, ohne änderungen zu reflektieren, die von einem anderen Cursor vorgenommen wurden. Unempfindliche Cursor sind schreibgeschützt. Dies entspricht einem statischen Cursor, der eine Parallelität aufweist, die schreibgeschützt ist.

SQL_SENSITIVE = Alle Cursor auf dem Anweisungshandle machen alle Änderungen sichtbar, die an einem Resultset von einem anderen Cursor vorgenommen wurden.

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 vorwärts.

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 der 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 zurück (Optionswert geändert). Bei einem gemischten oder dynamischen Cursor ersetzt der Treiber in der Reihenfolge einen keysetgesteuerten oder statischen Cursor. Bei einem keysetgesteuerten Cursor ersetzt der Treiber einen statischen Cursor.

Weitere Informationen zu Bildlaufcursortypen 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 Population der IPD ausgeführt wird:

SQL_TRUE = Aktiviert die automatische Population der IPD nach einem Aufruf von SQLPrepare. SQL_FALSE = Deaktiviert die automatische Population der IPD nach einem Aufruf von SQLPrepare. (Eine Anwendung kann weiterhin IPD-Feldinformationen abrufen, indem sie aufrufen SQLDescribeParam, falls unterstützt.) Der Standardwert des Anweisungsattributs SQL_ATTR_ENABLE_AUTO_IPD ist SQL_FALSE. Weitere Informationen finden Sie unter "Automatische Population der IPD".
SQL_ATTR_FETCH_BOOKMARK_PTR (ODBC 3.0) Ein SQLLEN * -Wert, der auf einen binären Textmarkenwert verweist. Wenn SQLFetchScroll mit fFetchOrientation mit SQL_FETCH_BOOKMARK aufgerufen wird, nimmt der Treiber den Textmarkenwert aus diesem Feld auf. Dieses Feld weist standardmäßig einen Nullzeiger auf. Weitere Informationen finden Sie unter Scrollen nach Textmarke.

Der wert, auf den dieses Feld verweist, wird nicht zum Löschen durch Textmarke, Aktualisierung durch Textmarke oder Abrufen von Textmarkenvorgängen in SQLBulkOperations verwendet, die Lesezeichen in Rowsetpuffern zwischengespeichert verwenden.
SQL_ATTR_IMP_PARAM_DESC (ODBC 3.0) Der Handle für die IPD. Der Wert dieses Attributs ist der Deskriptor, der zugewiesen wurde, als die Anweisung anfangs zugewiesen wurde. Die Anwendung kann dieses Attribut nicht festlegen.

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 an die IRD. Der Wert dieses Attributs ist der Deskriptor, der zugewiesen wurde, als die Anweisung anfangs zugewiesen wurde. Die Anwendung kann dieses Attribut nicht festlegen.

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-Wert, der die Anzahl der Zeilen im Keyset für einen keysetgesteuerten Cursor angibt. Wenn die Keysetgröße 0 (Standardeinstellung) ist, ist der Cursor vollständig keysetgesteuert. Wenn die Keysetgröße größer als 0 ist, wird der Cursor gemischt (keysetgesteuert innerhalb des Keysets und dynamisch außerhalb des Keysets). Die Standardtastenmengegröße 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 zurück (Optionswert geändert).

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 einem Zeichen oder einer binären Spalte 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 ist (Standard), versucht der Treiber, alle verfügbaren Daten zurückzugeben.

Wenn die angegebene Länge kleiner als die minimale Datenmenge 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 zurück (Optionswert geändert).

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 (Optionswert geändert) zurück und setzt das Attribut auf seinen ursprünglichen Wert zurück.

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

Dieses Attribut soll den Netzwerkdatenverkehr reduzieren. Konzeptionell wird sie angewendet, wenn das Resultset erstellt wird und das Resultset auf die ersten ValuePtr-Zeilen beschränkt. 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 für die Anweisung, einschließlich der von Katalogfunktionen zurückgegebenen Ergebnisse. SQL_ATTR_MAX_ROWS legt einen Maximalen für den Wert der Cursorzeilenanzahl fest.

Ein Treiber sollte SQL_ATTR_MAX_ROWS Verhalten für SQLFetch oder SQLFetchScroll nicht emulieren (wenn Die Größenbeschränkungen für resultset nicht in der Datenquelle implementiert werden können), wenn nicht garantiert werden kann, dass SQL_ATTR_MAX_ROWS ordnungsgemäß implementiert werden.

Es wird vom Treiber definiert, ob SQL_ATTR_MAX_ROWS auf andere Anweisungen als SELECT-Anweisungen (z. B. Katalogfunktionen) angewendet wird.

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 (Optionswert geändert) zurück und setzt das Attribut auf seinen 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 von Bedeutung. Bei nicht getrennten 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 nachgestellten Leerzeichen und nimmt das, was zwischen den Trennzeichen buchstäblich liegt. Wenn eines dieser Argumente auf einen Nullzeiger festgelegt ist, gibt die Funktion SQL_ERROR und SQLSTATE HY009 zurück (Ungültige Verwendung des Nullzeigers).

Wenn SQL_FALSE, werden die Zeichenfolgenargumente von Katalogfunktionen nicht als Bezeichner behandelt. Der Fall ist von Bedeutung. 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, wird von diesem Attribut nicht beeinflusst.

SQL_ATTR_METADATA_ID können auch auf der 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 nach Escapesequenzen scannen soll:

SQL_NOSCAN_OFF = Der Treiber scannt SQL-Zeichenfolgen nach Escapesequenzen (Standardeinstellung).

SQL_NOSCAN_ON = Der Treiber scannt keine SQL-Zeichenfolgen nach 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 zeigt, 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 den abgeleiteten Wert zu jedem der verzögerten Felder im Deskriptordatensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) hinzu und verwendet die neuen Zeigerwerte beim Binden. Sie ist standardmäßig auf NULL festgelegt.

Der Bindungsoffset wird immer direkt zu 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 zum Wert im Deskriptorfeld hinzugefügt. Der neue Offset wird nicht zum Feldwert und zu früheren Offsets hinzugefügt.

Weitere Informationen finden Sie unter Parameter binding Offsets.

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 (Standardeinstellung) festgelegt, um spaltenweise Bindung auszuwählen.

Um zeilenweise Bindung auszuwählen, wird dieses Feld auf die Länge der Struktur oder eine Instanz eines Puffers festgelegt, der an einen Satz dynamischer Parameter gebunden wird. Diese Länge muss Platz für alle gebundenen Parameter und alle Abstände der Struktur oder des Puffers enthalten, um sicherzustellen, dass, wenn die Adresse eines gebundenen Parameters mit der angegebenen Länge erhöht wird, das Ergebnis auf den Anfang desselben Parameters in der nächsten Gruppe von Parametern zeigt. Bei Verwendung des Sizeof-Operators in ANSI C ist dieses Verhalten garantiert.

Weitere Informationen finden Sie unter Binding Arrays of Parameters.

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 die Ausführung des Parameters) oder auf SQL_PARAM_IGNORE (für den zu ignorierenden Parameter) festgelegt.

Eine Reihe von Parametern kann während der Verarbeitung ignoriert werden, indem der Statuswert im Array festgelegt wird, auf das SQL_DESC_ARRAY_STATUS_PTR in der APD auf SQL_PARAM_IGNORE verweist. Eine Reihe von Parametern wird verarbeitet, wenn ihr 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 Arrays von Parametern.

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 Diagnosedatenstruktur verfügbar.

SQL_PARAM_ERROR: Fehler bei der Verarbeitung dieser Parametermenge. Zusätzliche Fehlerinformationen sind in der Diagnosedatenstruktur verfügbar.

SQL_PARAM_UNUSED: Dieser Parametersatz wurde nicht verwendet, möglicherweise aufgrund der Tatsache, dass ein früherer Parametersatz einen Fehler verursacht hat, der die weitere Verarbeitung abgebrochen hat, oder weil SQL_PARAM_IGNORE für diesen Satz von Parametern in dem array festgelegt wurde, das durch die SQL_ATTR_PARAM_OPERATION_PTR angegeben wurde.

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

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 Arrays von Parametern.

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 von Parametersätzen zurückgegeben werden soll, die verarbeitet wurden, einschließlich Fehlersätzen. Wenn es sich um einen Nullzeiger handelt, wird keine Zahl zurückgegeben.

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 durch dieses Attribut verweisenden Puffer ausfüllt, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, werden die Inhalte des Puffers nicht definiert.

Weitere Informationen finden Sie unter Verwenden von Arrays von Parametern.
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, SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR des APD-Punkts auf Arrays ist. Die Kardinalität der einzelnen Arrays entspricht dem Wert dieses Felds.

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

Weitere Informationen finden Sie unter Verwenden von Arrays von Parametern.

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, bis eine SQL-Anweisung ausgeführt wird, bevor sie zur Anwendung zurückkehrt. Wenn ValuePtr gleich 0 ist (Standard), 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 eine SELECT-Anweisung timeouts ist.

Das in diesem Anweisungsattribut festgelegte Abfragetimeout 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 rufen SQLFetch Daten ab, nachdem der Cursor an der angegebenen Position positioniert wurde. Dies ist die Standardeinstellung.

SQL_RD_OFF = SQLFetchScroll und in ODBC 3.x rufen 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 eine Textmarke für die Zeile abruft, ohne dass der Aufwand für das 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 (Optionswert geändert) zurück und setzt das Attribut auf seinen 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. Es ist auch die Anzahl der Zeilen in einem Textmarkenarray, die in einem Massenlesevorgang in SQLBulkOperations verwendet wird. Der Standardwert ist 1.

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

Weitere Informationen finden Sie unter Rowset Size.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_ARRAY_SIZE in der ARD-Kopfzeile 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, leitet der Treiber den Zeiger ab, fügt den abgeleiteten Wert zu jedem der verzögerten Felder im Deskriptordatensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) hinzu und verwendet die neuen Zeigerwerte beim Binden. Sie ist standardmäßig auf NULL festgelegt.

Durch Festlegen dieses Anweisungsattributs wird das SQL_DESC_BIND_OFFSET_PTR Feld in der ARD-Kopfzeile 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. 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 eine Instanz eines Puffers festgelegt wird, an die Ergebnisspalten gebunden werden.

Wenn eine Länge angegeben ist, muss sie Platz für alle gebundenen Spalten und alle Abstände der Struktur oder des Puffers enthalten, um sicherzustellen, dass das Ergebnis auf den Anfang der gleichen Spalte in der nächsten Zeile zeigt, wenn die Adresse einer gebundenen Spalte mit der angegebenen Länge erhöht wird. Bei Verwendung des Größenoperators mit Strukturen oder Gewerkschaften in ANSI C ist dieses Verhalten gewährleistet.

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

Weitere Informationen finden Sie unter Binding Columns for Use with Block Cursors.

Durch Festlegen dieses Anweisungsattributs wird das feld SQL_DESC_BIND_TYPE in der ARD-Kopfzeile 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 zum Ignorieren einer Zeile während eines Massenvorgangs mithilfe von SQLSetPos verwendet werden. Jeder Wert wird entweder auf SQL_ROW_PROCEED (für die Zeile, die in den Massenvorgang eingeschlossen werden soll) oder auf SQL_ROW_IGNORE (damit die Zeile vom Massenvorgang ausgeschlossen werden soll) festgelegt. (Zeilen können nicht ignoriert werden, indem sie dieses Array während der Aufrufe verwenden SQLBulkOperations.)

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 SQL_DESC_ARRAY_STATUS_PTR Feld in der ARD festgelegt.
SQL_ATTR_ROW_STATUS_PTR (ODBC 3.0) Ein SQLUSMALLINT * -Wert, der auf ein Array von SQLUSMALLINT-Werten verweist, die Zeilenstatuswerte nach einem Aufruf von SQLFetch oder SQLFetchScroll enthalten. Das Array weist so viele Elemente auf, 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 aufgerufen wird.

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

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

Dieses Attribut wird von einem ODBC 2.x-Treiber dem rgbRowStatus-Array in einem Aufruf von SQLExtendedFetch zugeordnet.
SQL_ATTR_ROWS_FETCHED_PTR (ODBC 3.0) Ein SQLULEN *-Wert, der auf einen Puffer verweist, 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 von einem Aufruf von SQLSetPos mit einem Argument "Operation" von SQL_REFRESH ausgeführt wird; 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 in den Puffer einfüllt, auf den dieses Attribut verweist, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, werden die Inhalte des Puffers nicht definiert.
SQL_ATTR_SIMULATE_CURSOR (ODBC 2.0) Ein SQLULEN-Wert, der angibt, ob Treiber, die positionierte Aktualisierungs- und Löschanweisungen simulieren, garantieren, dass diese Anweisungen nur eine einzelne Zeile betreffen.

Um positionierte Aktualisierungs- und Löschanweisungen zu simulieren, erstellen die meisten Treiber eine durchsuchte UPDATE - oder DELETE-Anweisung , die eine WHERE-Klausel enthält, 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 nicht erforderlich. Dies kann die Ausführungszeit verringern.

SQL_SC_NON_UNIQUE = Der Treiber garantiert nicht, dass simulierte, positionierte Aktualisierungs- oder Löschanweisungen nur eine Zeile betreffen; es liegt in der Verantwortung der Anwendung, dies zu tun. Wenn eine Anweisung mehrere Zeilen betrifft, gibt SQLExecute, SQLExecute, SQLExecDirect oder SQLSetPos SQLSTATE 01001 zurück (Cursorvorgangskonflikt).

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

SQL_SC_UNIQUE = Der Treiber garantiert, dass simulierte positionierte Aktualisierungs- oder Löschanweisungen nur eine Zeile betreffen. 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 Aktualisierungs- und Löschanweisungen bereitstellt und der Treiber Cursor nicht 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 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 zurück (Optionswert geändert). 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 Aktualisierungs- und Löschanweisungen.
SQL_ATTR_USE_BOOKMARKS (ODBC 2.0) Ein SQLULEN-Wert, der angibt, ob eine Anwendung Textmarken mit einem Cursor verwendet:

SQL_UB_OFF = Aus (Standardeinstellung)

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

Um Textmarken mit einem Cursor zu verwenden, muss die Anwendung dieses Attribut mit dem SQL_UB_VARIABLE Wert angeben, bevor Sie den Cursor öffnen.

Weitere Informationen finden Sie unter Abrufen von Textmarken.

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

Siehe Column-Wise Binding und Row-Wise Binding.

Weitere Informationen zu Siehe
Abbrechen der Verarbeitung von Anweisungen 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