Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No SDK do Windows 8, o ODBC adicionou um mecanismo para notificar os aplicativos quando uma operação assíncrona for concluída, que chamaremos de "notificação após a conclusão". (Consulte a Execução Assíncrona (Método de Notificação) para obter mais informações.) Este tópico discute alguns dos problemas para desenvolvedores de drivers.
A interface entre o Gerenciador de Driver e o Driver
O Gerenciador de Driver disponibiliza internamente uma função de retorno de chamada SQLAsyncNotificationCallback Function. SQLAsyncNotificationCallback só pode ser chamado pelo driver. Um aplicativo não pode chamá-lo diretamente. O driver chama SQLAsyncNotificationCallback sempre que novos dados são recebidos do servidor após o retorno de SQL_STILL_EXECUTING.
O Gerenciador de Driver fornece um mecanismo de retorno de chamada para que um driver possa notificar o Gerenciador de Driver quando algum progresso tiver sido feito na execução de uma operação assíncrona depois que a função correspondente retornar SQL_STILL_EXECUTING
O Gerenciador de Driver define o atributo SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK em um identificador de conexão de driver com um ponteiro de função não NULL, que é do tipo SQL_ASYNC_NOTIFICATION_CALLBACK, para que o driver funcione no modo de notificação para quaisquer operações assíncronas nesse identificador. Da mesma forma, o Gerenciador de Driver define o atributo SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK em um identificador de instrução de driver com um ponteiro de função não NULL, que também é do tipo SQL_ASYNC_NOTIFICATION_CALLBACK, para que o driver funcione no modo de notificação para quaisquer operações assíncronas nesse identificador.
Se uma operação assíncrona for executada em um manipulador de driver, as funções de driver assíncronas deverão funcionar de forma não bloqueante. Se a operação não puder ser concluída imediatamente, a função de driver deverá retornar SQL_STILL_EXECUTING. Esse requisito é verdadeiro para o modo de sondagem e o modo de notificação.
Se um identificador estiver no modo assíncrono de notificação, o driver deverá chamar a função de retorno de chamada 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. Em outras palavras, um SQL_STILL_EXECUTING de retorno deve ser emparelhado com uma invocação da função de retorno de chamada de notificação. O driver deve usar o valor atual do atributo de identificador de SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT ou SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT como parâmetro para a função de chamada de retorno pContext.
O driver não deve realizar uma chamada de retorno na thread que executa a função do driver; não há razão para notificar o progresso antes que a função retorne. O driver deve usar seu próprio thread para retorno de chamada. O Gerenciador de Driver não usará o thread de retorno de chamada do driver para executar lógica de processamento extensiva.
O Gerenciador de Driver chamará a função original novamente depois que o driver retornar. O Gerenciador de Driver pode usar um thread que não seja um thread de aplicativo nem um thread de driver. Se o driver usar algumas informações associadas ao thread (por exemplo, token de segurança ou identificador de usuário), o driver deverá salvar as informações necessárias na chamada assíncrona inicial e usar o valor salvo antes que toda a operação assíncrona seja concluída. Normalmente, somente SQLDriverConnect, SQLConnect ou SQLBrowseConnect precisam usar esse tipo de informação.