Modalità asincrona e SQLCancel
Alcune funzioni ODBC possono essere utilizzate in modo sincrono o in modo asincrono. Le operazioni asincrone possono essere abilitate per un handle di istruzione o per un handle di connessione. Se l'opzione viene impostata per un handle di connessione, sarà valida per tutti gli handle di istruzione nell'handle di connessione. Per abilitare o disabilitare le operazioni asincrone vengono utilizzate le istruzioni seguenti:
SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);
Quando una funzione ODBC viene chiamata in modalità sincrona, il driver restituisce il controllo all'applicazione solo dopo la notifica del completamento del comando da parte del server.
In modalità asincrona, il driver restituisce immediatamente il controllo all'applicazione, anche prima dell'invio del comando al server. Il driver imposta il codice restituito su SQL_STILL_EXECUTING. È quindi possibile eseguire altre operazioni.
Durante il controllo del completamento del comando, viene effettuata la stessa chiamata di funzione con gli stessi parametri al driver. Se il driver non riceve una risposta dal server, restituirà nuovamente SQL_STILL_EXECUTING. È necessario controllare periodicamente il comando finché il codice restituito non sia diverso da SQL_STILL_EXECUTING. Quando si ottiene un codice restituito diverso, anche SQL_ERROR, è possibile determinare che il comando è stato completato.
A volte un comando rimane in attesa per molto tempo. Se è necessario annullare il comando senza attendere alcuna risposta, è possibile chiamare SQLCancel con lo stesso handle di istruzione del comando in attesa. Si tratta dell'unica volta in cui deve essere utilizzato SQLCancel. Alcuni programmatori utilizzano SQLCancel durante l'elaborazione di un set di risultati per annullare il resto del set di risultati. Per annullare il resto di un set di risultati in attesa, è consigliabile utilizzare SQLMoreResults o SQLCloseCursor, anziché SQLCancel.
Vedere anche
Concetti
Creazione di un'applicazione driver ODBC di SQL Server Native Client