Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No SDK do Windows 8, o ODBC adicionou um mecanismo para notificar as aplicações quando uma operação assíncrona é concluída, a que nos referiremos como "notificação na conclusão". (Ver Execução Assíncrona (Método de Notificação) para mais informações.) Este tópico aborda algumas das questões para os desenvolvedores de drivers.
A Interface entre o Gestor de Controladores e o Controlador
O Driver Manager fornece internamente uma função de callback SQLAsyncNotificationCallback. SQLAsyncNotificationCallback só pode ser chamado pelo driver — uma aplicação não pode chamá-lo diretamente. O driver chama SQLAsyncNotificationCallback sempre que novos dados são recebidos do servidor após ter retornado SQL_STILL_EXECUTING pela última vez.
O Gestor de Drivers fornece um mecanismo de callback para que um driver possa notificar o Gestor de Drivers quando tenha sido feito algum progresso na execução de uma operação assíncrona após a função correspondente retornar SQL_STILL_EXECUTING.
O gestor de drivers define o atributo SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK num handle de ligação do driver com um ponteiro de função não NULL, do tipo SQL_ASYNC_NOTIFICATION_CALLBACK, permitindo que o driver funcione em modo de notificação para quaisquer operações assíncronas nesse handle. De forma semelhante, o Driver Manager define o atributo SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK num handle de instrução do driver com um ponteiro de função que não seja NULL, que também é do tipo SQL_ASYNC_NOTIFICATION_CALLBACK, para que o driver trabalhe em modo de notificação para quaisquer operações assíncronas nesse handle.
Se for realizada uma operação assíncrona num handle de driver, as funções assíncronas do driver devem operar num estilo não bloqueante. Se a operação não puder ser concluída imediatamente, a função do driver deve devolver SQL_STILL_EXECUTING. Este requisito é válido tanto para o modo de sondagem como para o modo de notificação.
Se um handle estiver em modo de notificação assíncrona, o driver deve chamar a função de callback de notificação, cujo endereço é o valor do atributo SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK ou SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, uma vez após retornar SQL_STILL_EXECUTING. Ou seja, uma SQL_STILL_EXECUTING que retorna deve ser emparelhada com uma invocação da função de chamada de notificação. O driver deve usar o valor atual do atributo SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT ou SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT handle como valor para o parâmetro da função de retorno de chamada pContext.
O driver não deve iniciar uma chamada de retorno na tarefa que chama a função do driver. Não há razão para notificar o progresso antes da função retornar. O driver deve usar o seu próprio thread para fazer callback. O Gestor de Drivers não utilizará a thread de callback do driver para executar lógica de processamento extensa.
O Gestor de Controladores voltará a chamar a função original depois de o driver fazer uma chamada de retorno. O Gestor de Drivers pode usar um thread que não seja nem um thread de aplicação nem um thread de drivers. Se o driver usar alguma informação associada à thread (por exemplo, token de segurança ou identificador de utilizador), deve guardar a informação necessária na chamada assíncrona inicial e usar o valor guardado antes de toda a operação assíncrona ser concluída. Normalmente, só o SQLDriverConnect, SQLConnect ou SQLBrowseConnect precisam de usar esse tipo de informação.