Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W zestawie SDK systemu Windows 8 ODBC dodano mechanizm powiadamiania aplikacji, gdy operacja asynchroniczna zostanie zakończona, co określamy jako "powiadomienie po zakończeniu". (Aby uzyskać więcej informacji, zobacz Asynchronous Execution (Metoda powiadomienia ). W tym temacie omówiono niektóre problemy związane z deweloperami sterowników.
Interfejs między menedżerem sterowników a sterownikiem
Menedżer sterowników wewnętrznie udostępnia funkcję wywołania zwrotnego SQLAsyncNotificationCallback Function. Funkcja SQLAsyncNotificationCallback może być wywoływana tylko przez sterownik — aplikacja nie może wywołać jej bezpośrednio. Sterownik wywołuje funkcję zwrotną SQLAsyncNotificationCallback za każdym razem, gdy po ostatnim zgłoszeniu stanu SQL_STILL_EXECUTING zostaną odebrane nowe dane z serwera.
Menedżer sterowników udostępnia mechanizm wywołania zwrotnego, dzięki któremu sterownik może powiadomić Menedżera sterowników, gdy zostanie osiągnięty pewien postęp w realizacji operacji asynchronicznej po powrocie odpowiedniej funkcji z wartością SQL_STILL_EXECUTING.
Menedżer sterowników ustawia atrybut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK na uchwycie połączenia sterownika z nie-nullowym wskaźnikiem funkcji typu SQL_ASYNC_NOTIFICATION_CALLBACK, aby sterownik działał w trybie powiadomień dla wszelkich asynchronicznych operacji na tym uchwycie. Podobnie, Menedżer sterowników ustawia atrybut SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK na dojściu instrukcji sterownika ze wskaźnikiem funkcji różnym od NULL, który jest również typu SQL_ASYNC_NOTIFICATION_CALLBACK, aby sterownik działał w trybie powiadomień dla dowolnej asynchronicznej operacji na tym dojściu.
Jeśli na uchwycie sterownika jest wykonywana operacja asynchroniczna, asynchroniczne funkcje sterownika powinny działać w stylu nieblokującym. Jeśli operacja nie może zostać ukończona natychmiast, funkcja sterownika powinna zwrócić SQL_STILL_EXECUTING. To wymaganie dotyczy zarówno trybu sondowania, jak i trybu powiadomień.
Jeśli uchwyt jest w trybie asynchronicznego powiadamiania, sterownik musi jednokrotnie wywołać funkcję zwrotną powiadomień, której adres to wartość atrybutu SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK lub SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, po zakończeniu wykonywania oznaczonego jako SQL_STILL_EXECUTING. Innymi słowy, jeden zwracany SQL_STILL_EXECUTING musi być sparowany z jednym wywołaniem funkcji wywołania zwrotnego powiadomień. Sterownik powinien użyć wartości bieżącej atrybutu dojścia SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT lub SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT jako wartości parametru funkcji callback pContext.
Sterownik nie powinien ponownie wywoływać wątku, który wywołuje funkcję sterownika; nie ma potrzeby informowania o postępie przed zakończeniem działania funkcji. Sterownik powinien używać własnego wątku do obsługi wywołania zwrotnego. Menedżer sterowników nie będzie używać wątku wywołania zwrotnego sterownika do wykonywania rozbudowanej logiki przetwarzania.
Menadżer Sterowników ponownie wywoła oryginalną funkcję po tym, jak sterownik wykona swoje wywołanie zwrotne. Menedżer sterowników może używać wątku, który nie jest ani wątkiem aplikacji, ani wątkiem sterownika. Jeśli sterownik używa niektórych informacji skojarzonych z wątkiem (na przykład tokenu zabezpieczającego lub identyfikatora użytkownika), sterownik powinien zapisać wymagane informacje w początkowym wywołaniu asynchronicznym i użyć zapisanej wartości przed zakończeniem całej operacji asynchronicznej. Zwykle tylko sqlDriverConnect, SQLConnect lub SQLBrowseConnect muszą używać tego rodzaju informacji.