Teilen über


Cursoreigenschaften und Cursortyp

Eine Anwendung kann die Merkmale eines Cursors angeben, anstatt den Cursortyp anzugeben (vorwärts, statisch, keysetgesteuert oder dynamisch). Dazu wählt die Anwendung die Bildlaufbarkeit des Cursors (durch Festlegen des Attributs SQL_ATTR_CURSOR_SCROLLABLE-Anweisung) und Vertraulichkeit (durch Festlegen des attributs der SQL_ATTR_CURSOR_SENSITIVITY-Anweisung) aus, bevor sie den Cursor auf dem Anweisungshandle öffnen. Der Treiber wählt dann den Cursortyp aus, der die von der Anwendung angeforderten Merkmale am effizientesten bereitstellt.

Wenn eine Anwendung eines der Anweisungsattribute SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE, SQL_ATTR_CURSOR_SENSITIVITY oder SQL_ATTR_CURSOR_TYPE festlegt, nimmt der Treiber alle erforderlichen Änderungen an den anderen Anweisungsattributen in diesem Satz von vier Attributen vor, sodass ihre Werte konsistent Standard sind. Wenn die Anwendung ein Cursormerkmal angibt, kann der Treiber das Attribut ändern, das den Cursortyp basierend auf dieser impliziten Auswahl angibt. wenn die Anwendung einen Typ angibt, kann der Treiber jedes der anderen Attribute ändern, um mit den Merkmalen des ausgewählten Typs konsistent zu sein. Weitere Informationen zu diesen Anweisungsattributen finden Sie in der SQLSetStmtAttr-Funktionsbeschreibung .

Eine Anwendung, die Anweisungsattribute festlegt, um sowohl einen Cursortyp als auch Cursormerkmale anzugeben, besteht das Risiko, einen Cursor zu erhalten, der nicht die effizienteste Methode ist, die für diesen Treiber verfügbar ist, um die Anforderungen der Anwendung zu erfüllen.

Die implizite Einstellung von Anweisungsattributen ist treiberdefiniert, mit der Ausnahme, dass sie den folgenden Regeln entsprechen muss:

  • Vorwärtscursor sind nie bildlauffähig; siehe definition von SQL_ATTR_CURSOR_SCROLLABLE in SQLSetStmtAttr.

  • Unempfindliche Cursor sind nie aktualisierbar (und damit ist ihre Parallelität schreibgeschützt); dies basiert auf der Definition von insensitiven Cursorn im ISO SQL-Standard.

Folglich tritt die implizite Einstellung von Anweisungsattributen in den in der folgenden Tabelle beschriebenen Fällen auf.

Application sets attribute to Andere Attribute, die implizit festgelegt werden
SQL_ATTR_CONCURRENCY zum SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY, um SQL_INSENSITIVE.
SQL_ATTR_CONCURRENCY SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER oder SQL_CONCUR_VALUES SQL_ATTR_CURSOR_SENSITIVITY, wie vom Treiber definiert, SQL_UNSPECIFIED oder SQL_SENSITIVE. Sie kann niemals auf SQL_INSENSITIVE festgelegt werden, da unempfindliche Cursor immer schreibgeschützt sind.
SQL_ATTR_CURSOR_SCROLLABLE zum SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE zum SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE zu SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE, wie vom Treiber angegeben, zu SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN oder SQL_CURSOR_DYNAMIC. Es ist nie auf SQL_CURSOR_FORWARD_ONLY festgelegt.
SQL_ATTR_CURSOR_SENSITIVITY zum SQL_INSENSITIVE SQL_ATTR_CONCURRENCY, um SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_STATIC.
SQL_ATTR_CURSOR_SENSITIVITY zu SQL_SENSITIVE SQL_ATTR_CONCURRENCY, wie vom Treiber angegeben, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER oder SQL_CONCUR_VALUES. Es wird nie auf SQL_CONCUR_READ_ONLY festgelegt.

SQL_ATTR_CURSOR_TYPE, wie vom Treiber angegeben, SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN oder SQL_CURSOR_DYNAMIC zu SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SENSITIVITY zu SQL_UNSPECIFIED SQL_ATTR_CONCURRENCY, wie vom Treiber angegeben, SQL_CONCUR_READ_ONLY, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER oder SQL_CONCUR_VALUES zu SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE, wie vom Treiber angegeben, SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN oder SQL_CURSOR_DYNAMIC zu SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_TYPE zum SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_CURSOR_SENSITIVITY, um SQL_SENSITIVE. (Aber nur, wenn SQL_ATTR_CONCURRENCY nicht gleich SQL_CONCUR_READ_ONLY ist. Aktualisierbare dynamische Cursor sind immer vertraulich für Änderungen, die in ihrer eigenen Transaktion vorgenommen wurden.)
SQL_ATTR_CURSOR_TYPE zum SQL_CURSOR_FORWARD_ONLY SQL_ATTR_CURSOR_SCROLLABLE to SQL_NONSCROLLABLE.
SQL_ATTR_CURSOR_TYPE zu SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY, um SQL_UNSPECIFIED oder SQL_SENSITIVE (gemäß treiberdefinierter Kriterien, wenn SQL_ATTR_CONCURRENCY nicht SQL_CONCUR_READ_ONLY ist).
SQL_ATTR_CURSOR_TYPE zum SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY SQL_INSENSITIVE (wenn SQL_ATTR_CONCURRENCY SQL_CONCUR_READ_ONLY ist).

SQL_ATTR_SENSITIVITY SQL_UNSPECIFIED oder SQL_SENSITIVE (wenn SQL_ATTR_CONCURRENCY nicht SQL_CONCUR_READ_ONLY ist).