Caratteristiche e tipo di cursore

Un'applicazione può specificare le caratteristiche di un cursore anziché specificare il tipo di cursore (forward-only, statico, basato su keyset o dinamico). A tale scopo, l'applicazione seleziona la scorrebilità del cursore (impostando l'attributo dell'istruzione SQL_ATTR_CURSOR_SCROLLABLE) e la riservatezza (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 caratteristiche del cursore corre il rischio di ottenere un cursore che non sia il metodo più efficiente disponibile in 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 senza distinzione tra maiuscole e minuscole non sono mai aggiornabili e pertanto la concorrenza è di sola lettura. ciò si basa sulla definizione dei cursori senza distinzione tra maiuscole e minuscole nello standard ISO SQL standard.

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

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

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

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

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

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

SQL_ATTR_SENSITIVITY da 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 da SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE da SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY da SQL_INSENSITIVE (se SQL_ATTR_CONCURRENCY è SQL_CONCUR_READ_ONLY).

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