Asynchroniczny tryb i SQLCancel
Niektóre funkcje ODBC może działać synchronicznie lub asynchronicznie.Aplikację można włączyć operacji asynchronicznych dla dojścia instrukcja lub dojścia połączenia.Jeśli opcja jest zestaw dla dojścia połączenia wpływa na wszystkie dojścia instrukcja na dojścia połączenia.Aplikacja wykorzystuje następujące instrukcje, aby włączyć lub wyłączyć operacji asynchronicznych:
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);
Gdy aplikacja wywołuje funkcja ODBC w trybie synchronicznym, sterownik nie zwraca sterowania do aplikacji do czasu powiadomienia, że serwer zakończył polecenia.
Gdy asynchronicznie, sterownik natychmiast zwraca sterowanie do aplikacji, nawet przed wysłaniem do serwera polecenie.Sterownik ustawia kod zwrotny SQL_STILL_EXECUTING.Aplikacja może następnie wykonać innych prac.
Podczas testów aplikacji dla wykonania polecenia, dzięki tej samej funkcja WYWOŁAJ o takich samych parametrach sterownika.Jeśli sterownik jeszcze nie otrzymał odpowiedzi z serwera, ponownie zwróci SQL_STILL_EXECUTING.Aplikacja musi przetestować polecenie okresowo aż kod zwrotny jest inny niż SQL_STILL_EXECUTING.Kiedy aplikacja uzyskuje niektóre inne kod zwrotny, nawet wartość SQL_ERROR, można określić polecenia zakończyło.
Czasami polecenia jest nieuregulowane długi czas.Jeśli aplikacja musi anulować polecenie bez oczekiwania na odpowiedź, to można to zrobić przez wywołanie SQLCancel z tej samej instrukcja obsługi jako oczekujące polecenie.Jest to jedyny czas SQLCancel powinna być używana.Użyj niektórych programistów SQLCancel podczas ich zostały przetworzone części sposób za pośrednictwem wyniku ustaw i chcesz anulować pozostałą część zestaw wyników.SQLMoreResults lub SQLCloseCursor powinna być używana do anulować pozostałą część zestaw wyników zaległych nie SQLCancel.