Compartilhar via


Cursores de somente avanço rápido (ODBC)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Quando conectado a uma instância do SQL Server, o driver ODBC do SQL Server Native Client dá suporte a otimizações de desempenho para cursores somente leitura e somente para frente. Os cursores de somente avanço são implementados internamente pelo driver e pelo servidor de maneira bem semelhante a conjuntos de resultados padrão. Além de ter alto desempenho, os cursores de somente avançado também têm essas características:

  • Não há suporte para SQLGetData . As colunas do conjunto de resultados devem ser associadas para programar variáveis.

  • O servidor fecha automaticamente o cursor quando se detecta a extremidade do cursor. O aplicativo ainda deve chamar SQLCloseCursor ou SQLFreeStmt(SQL_CLOSE), mas o driver não precisa enviar a solicitação de fechamento ao servidor. Isso economiza uma viagem de ida-e-volta na rede até o servidor.

O aplicativo solicita cursores de somente avanço usando o atributo da instrução específica do driver SQL_SOPT_SS_CURSOR_OPTIONS. Quando definidos como SQL_CO_FFO, os cursores de somente avanço são habilitados sem busca automática. Quando definida como SQL_CO_FFO_AF, a opção de busca automática também é habilitada. Para obter mais informações sobre a busca automática, consulte Usando a busca automática com cursores ODBC.

Os cursores de somente avanço com busca automática podem ser usados para recuperar um pequeno conjunto de resultados com apenas uma viagem de ida-e-volta até o servidor. Nestas etapas, n é o número de linhas a serem retornadas:

  1. Defina SQL_SOPT_SS_CURSOR_OPTIONS como SQL_CO_FFO_AF.

  2. Defina SQL_ATTR_ROW_ARRAY_SIZE como n + 1.

  3. Associe as colunas de resultado a matrizes de n + 1 elementos (para ser seguro se n + 1 linhas forem realmente buscadas).

  4. Abra o cursor com SQLExecDirect ou SQLExecute.

  5. Se o status de retorno for SQL_SUCCESS, chame SQLFreeStmt ou SQLCloseCursor para fechar o cursor. Todos os dados das linhas estarão nas variáveis de programas associados.

Com essas etapas, o SQLExecDirect ou SQLExecute envia uma solicitação de abertura do cursor com a opção de busca automática habilitada. Nessa solicitação única do cliente, o servidor:

  • Abre o cursor.

  • Compila o conjunto de resultados e envia as linhas para o cliente.

  • Como o tamanho do conjunto de linhas foi definido como 1 além do número de linhas do conjunto de resultados, o servidor detecta o final do cursor e o fecha.

Confira também

Detalhes da programação de cursor (ODBC)