Właściwości kursora i typ kursora

Aplikacja może określić charakterystykę kursora zamiast określać typ kursora (tylko do przodu, statyczny, oparty na kluczu lub dynamiczny). W tym celu aplikacja wybiera możliwość przewijania kursora (ustawiając atrybut instrukcji SQL_ATTR_CURSOR_SCROLLABLE) i czułość (ustawiając atrybut instrukcji SQL_ATTR_CURSOR_SENSITIVITY) przed otwarciem kursora na dojściu instrukcji. Następnie sterownik wybiera typ kursora, który najefektywniej zapewnia charakterystykę żądaną przez aplikację.

Za każdym razem, gdy aplikacja ustawia dowolne atrybuty instrukcji SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE, SQL_ATTR_CURSOR_SENSITIVITY lub SQL_ATTR_CURSOR_TYPE, sterownik wprowadza wszelkie wymagane zmiany w innych atrybutach instrukcji w tym zestawie czterech atrybutów, aby ich wartości pozostały spójne. W związku z tym, gdy aplikacja określa charakterystykę kursora, sterownik może zmienić atrybut wskazujący typ kursora na podstawie tego niejawnego zaznaczenia; gdy aplikacja określa typ, sterownik może zmienić dowolny z innych atrybutów, aby był zgodny z cechami wybranego typu. Aby uzyskać więcej informacji na temat tych atrybutów instrukcji, zobacz opis funkcji SQLSetStmtAttr .

Aplikacja, która ustawia atrybuty instrukcji w celu określenia zarówno typu kursora, jak i właściwości kursora, wiąże się z ryzykiem uzyskania kursora, który nie jest najbardziej wydajną metodą dostępną dla tego sterownika spełniającego wymagania aplikacji.

Niejawne ustawienie atrybutów instrukcji jest definiowane przez sterownik, z tą różnicą, że musi przestrzegać następujących reguł:

  • Kursorów tylko do przodu nie można nigdy przewijać; zobacz definicję SQL_ATTR_CURSOR_SCROLLABLE w SQLSetStmtAttr.

  • Niewrażliwe kursory nigdy nie są aktualizowalne (a zatem ich współbieżność jest tylko do odczytu); Jest to oparte na ich definicji niewrażliwych kursorów w standardzie ISO SQL.

W związku z tym niejawne ustawienie atrybutów instrukcji występuje w przypadkach opisanych w poniższej tabeli.

Ustawia atrybut w aplikacji Inne atrybuty ustawiane niejawnie
SQL_ATTR_CONCURRENCY: SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY na SQL_INSENSITIVE.
SQL_ATTR_CONCURRENCY do SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER lub SQL_CONCUR_VALUES SQL_ATTR_CURSOR_SENSITIVITY do SQL_UNSPECIFIED lub SQL_SENSITIVE zgodnie z definicją sterownika. Nigdy nie można ustawić go na SQL_INSENSITIVE, ponieważ niewrażliwe kursory są zawsze tylko do odczytu.
Ustawienie SQL_ATTR_CURSOR_SCROLLABLE na SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE do SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE do SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE do SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN lub SQL_CURSOR_DYNAMIC, zgodnie z określeniami sterownika. Nigdy nie jest ustawiona na SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SENSITIVITY na SQL_INSENSITIVE SQL_ATTR_CONCURRENCY na SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE na SQL_CURSOR_STATIC.
SQL_ATTR_CURSOR_SENSITIVITY do SQL_SENSITIVE SQL_ATTR_CONCURRENCY na SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER lub SQL_CONCUR_VALUES, zgodnie z określeniem sterownika. Nigdy nie jest ustawiona na SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE do SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN lub SQL_CURSOR_DYNAMIC, zgodnie z ustawieniami sterownika.
SQL_ATTR_CURSOR_SENSITIVITY do SQL_UNSPECIFIED SQL_ATTR_CONCURRENCY można ustawić na SQL_CONCUR_READ_ONLY, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER lub SQL_CONCUR_VALUES, zgodnie z określeniami sterownika.

SQL_ATTR_CURSOR_TYPE do SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN lub SQL_CURSOR_DYNAMIC, zgodnie ze sterownikiem.
SQL_ATTR_CURSOR_TYPE na SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE na SQL_SCROLLABLE.

SQL_ATTR_CURSOR_SENSITIVITY to SQL_SENSITIVE. (Ale tylko wtedy, gdy SQL_ATTR_CONCURRENCY nie jest równa SQL_CONCUR_READ_ONLY. Dynamiczne kursory z możliwością aktualizacji są zawsze wrażliwe na zmiany wprowadzone we własnej transakcji).
SQL_ATTR_CURSOR_TYPE do SQL_CURSOR_FORWARD_ONLY SQL_ATTR_CURSOR_SCROLLABLE do SQL_NONSCROLLABLE.
SQL_ATTR_CURSOR_TYPE na SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY SQL_UNSPECIFIED lub SQL_SENSITIVE (zgodnie z kryteriami zdefiniowanymi przez sterownik, jeśli SQL_ATTR_CONCURRENCY nie jest SQL_CONCUR_READ_ONLY).
SQL_ATTR_CURSOR_TYPE do SQL_CURSOR_STATIC Ustaw wartość SQL_ATTR_SCROLLABLE na SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY na SQL_INSENSITIVE (jeśli SQL_ATTR_CONCURRENCY jest SQL_CONCUR_READ_ONLY)

Ustaw SQL_ATTR_SENSITIVITY na SQL_UNSPECIFIED lub SQL_SENSITIVE (jeśli SQL_ATTR_CONCURRENCY nie jest SQL_CONCUR_READ_ONLY).