Impostare le opzioni del cursore (ODBC)

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);  

Vedere anche

Procedure per l'esecuzione di query (ODBC)