Criar um aplicativo de driver – Modo assíncrono e SQLCancel
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)
Importante
O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento de aplicativo. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) ou o Microsoft ODBC Driver for SQL Server mais recente no futuro. Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), consulte esta exceção de Ciclo de Vida de Suporte.
Algumas funções ODBC podem operar de forma síncrona ou assíncrona. O aplicativo pode habilitar operações assíncronas para um identificador de instrução ou um identificador de conexão. Se a opção for definida para um identificador de conexão, ela afetará todos os identificadores de instrução do identificador de conexão. O aplicativo usa as seguintes instruções para habilitar ou desabilitar operações assíncronas:
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 um aplicativo chama uma função ODBC no modo síncrono, o driver não retorna o controle para o aplicativo antes de ser notificado que o servidor concluiu o comando.
Na operação assíncrona, o driver retorna o controle para o aplicativo, mesmo antes de enviar o comando ao servidor. O driver define o código de retorno como SQL_STILL_EXECUTING. O aplicativo poderá, então, executar outro trabalho.
Quando o aplicativo testa para concluir o comando, faz a mesma chamada de função com os mesmos parâmetros para o driver. Se o driver ainda não tiver recebido uma resposta do servidor, novamente retornará SQL_STILL_EXECUTING. O aplicativo deve testar o comando periodicamente até que o código de retorno seja diferente de SQL_STILL_EXECUTING. Quando o aplicativo obtiver algum outro código de retorno, até mesmo SQL_ERROR, ele poderá determinar que o comando foi concluído.
Às vezes um comando fica pendente por muito tempo. Se o aplicativo precisar cancelar o comando sem aguardar uma resposta, ele poderá fazer isso chamando SQLCancel com o mesmo identificador de instrução que o comando pendente. Esta é a única vez em que o SQLCancel deve ser usado. Alguns programadores usam SQLCancel quando processam parcialmente um conjunto de resultados e desejam cancelar o restante do conjunto de resultados. SQLMoreResults ou SQLCloseCursor deve ser usado para cancelar o restante de um conjunto de resultados pendente, não SQLCancel.
Consulte Também
Criando um aplicativo de driver ODBC do SQL Server Native Client
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de