Caratteristiche e tipo di cursore

Un'applicazione può specificare le caratteristiche di un cursore anziché specificare il tipo di cursore (forward-only, statico, gestito da keyset o dinamico). A tale scopo, l'applicazione seleziona la scorrevolezza del cursore (impostando l'attributo dell'istruzione SQL_ATTR_CURSOR_SCROLLABLE) e la sensibilità (impostando l'attributo dell'istruzione SQL_ATTR_CURSOR_SENSITIVITY) prima di aprire il cursore sull'handle dell'istruzione. Il driver sceglie quindi il tipo di cursore che fornisce in modo più efficiente le caratteristiche richieste dall'applicazione.

Ogni volta che un'applicazione imposta uno degli attributi dell'istruzione SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE, SQL_ATTR_CURSOR_SENSITIVITY o SQL_ATTR_CURSOR_TYPE, il driver apporta qualsiasi modifica necessaria agli altri attributi dell'istruzione in questo set di quattro attributi, in modo che i relativi valori rimangano coerenti. Di conseguenza, quando l'applicazione specifica una caratteristica del cursore, il driver può modificare l'attributo che indica il tipo di cursore in base a questa selezione implicita; quando l'applicazione specifica un tipo, il driver può modificare qualsiasi altro attributo, in modo che sia coerente con le caratteristiche del tipo selezionato. Per altre informazioni su questi attributi di istruzione, vedere la descrizione della funzione SQLSetStmtAttr.

Un'applicazione che imposta gli attributi dell'istruzione per specificare sia un tipo di cursore che le sue caratteristiche comporta il rischio di ottenere un cursore che non sia il metodo più efficiente disponibile su tale driver per soddisfare i requisiti dell'applicazione.

L'impostazione implicita degli attributi dell'istruzione è definita dal driver, ad eccezione del fatto che deve seguire queste regole:

  • I cursori forward-only non sono mai scorrevoli; vedere la definizione di SQL_ATTR_CURSOR_SCROLLABLE in SQLSetStmtAttr.

  • I cursori di tipo insensitive non possono mai essere aggiornati (e pertanto la concorrenza è di sola lettura); ciò si basa sulla definizione di cursori di tipo insensitive nello standard ISO SQL.

Di conseguenza, l'impostazione implicita degli attributi dell'istruzione si verifica nei casi descritti nella tabella seguente.

L'attributo dell'applicazione viene impostato su Altri attributi impostati in modo implicito
SQL_ATTR_CONCURRENCY su SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY su SQL_INSENSITIVE.
SQL_ATTR_CONCURRENCY su SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES SQL_ATTR_CURSOR_SENSITIVITY su SQL_UNSPECIFIED o SQL_SENSITIVE, come definito dal driver. Non può mai essere impostato su SQL_INSENSITIVE, perché i cursori di tipo insensitive sono sempre di sola lettura.
SQL_ATTR_CURSOR_SCROLLABLE su SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE su SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN o SQL_CURSOR_DYNAMIC, come specificato dal driver. Non è mai impostato su SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SENSITIVITY su SQL_INSENSITIVE SQL_ATTR_CONCURRENCY su SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE a SQL_CURSOR_STATIC.
SQL_ATTR_CURSOR_SENSITIVITY su SQL_SENSITIVE SQL_ATTR_CONCURRENCY su SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES, come specificato dal driver. Non è mai impostato su SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN o SQL_CURSOR_DYNAMIC, come specificato dal driver.
SQL_ATTR_CURSOR_SENSITIVITY su SQL_UNSPECIFIED SQL_ATTR_CONCURRENCY su SQL_CONCUR_READ_ONLY, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES, come specificato dal driver.

SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN o SQL_CURSOR_DYNAMIC, come specificato dal driver.
SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE su SQL_SCROLLABLE.

SQL_ATTR_CURSOR_SENSITIVITY su SQL_SENSITIVE. (Ma solo se SQL_ATTR_CONCURRENCY non è uguale a SQL_CONCUR_READ_ONLY. I cursori dinamici aggiornabili sono sempre sensibili alle modifiche apportate nella propria transazione.)
SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_FORWARD_ONLY SQL_ATTR_CURSOR_SCROLLABLE su SQL_NONSCROLLABLE.
SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE su SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY su SQL_UNSPECIFIED o SQL_SENSITIVE (in base ai criteri definiti dal driver, se SQL_ATTR_CONCURRENCY non è SQL_CONCUR_READ_ONLY).
SQL_ATTR_CURSOR_TYPE su SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE su SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY su SQL_INSENSITIVE (se SQL_ATTR_CONCURRENCY è SQL_CONCUR_READ_ONLY).

SQL_ATTR_SENSITIVITY su SQL_UNSPECIFIED o SQL_SENSITIVE (se SQL_ATTR_CONCURRENCY non è SQL_CONCUR_READ_ONLY).