Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per impostare le opzioni del cursore, Chiamare SQLSetStmtAttr per impostare o SQLGetStmtAttr per ottenere le opzioni dell'istruzione che controllano il comportamento del cursore.
| Attributo | Specifica |
|---|---|
| SQL_ATTR_CURSOR_TYPE | Tipo di cursore basato su forward-only, statico, dinamico o keyset |
| SQL_ATTR_CONCURRENCY | Opzione di controllo della concorrenza di sola lettura, blocco, ottimistica tramite timestamp o uso ottimistico dei valori |
| SQL_ATTR_ROW_ARRAY_SIZE | Numero di righe recuperate in ogni recupero |
| SQL_ATTR_CURSOR_SENSITIVITY | Cursore che non mostra gli aggiornamenti alle righe del cursore effettuate da altre connessioni |
| SQL_ATTR_CURSOR_SCROLLABLE | Cursore che può essere scorrevole in avanti e indietro |
I valori predefiniti per questi attributi (forward-only, read-only, rowset size of 1) non usano cursori server. Per utilizzare i cursori del server, è necessario impostare almeno uno di questi attributi su un valore diverso da quello predefinito e l'istruzione eseguita deve essere una singola istruzione SELECT o una stored procedure che contiene una singola istruzione SELECT. Quando si usano cursori server, le istruzioni SELECT non possono usare clausole non supportate dai cursori server: COMPUTE, COMPUTE BY, FOR BROWSE e INTO.
È possibile controllare il tipo di cursore utilizzato impostando SQL_ATTR_CURSOR_TYPE e SQL_ATTR_CONCURRENCY oppure impostando SQL_ATTR_CURSOR_SENSITIVITY e SQL_ATTR_CURSOR_SCROLLABLE. Non è consigliabile combinare i due metodi per specificare il comportamento del cursore.
Esempio
Nell'esempio seguente viene allocato un handle di istruzione, viene impostato un tipo di cursore dinamico con concorrenza ottimistica con controllo delle versioni delle righe e quindi viene eseguito un'istruzione SELECT.
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);
Esempio
L'esempio seguente alloca un handle di istruzione, imposta un cursore scorrevole, sensibile e quindi esegue un'istruzione SELECT
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
// Set the cursor options and execute the statement.
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);