Cursores ODBC

Um aplicativo busca dados com um cursor. Um cursor é diferente de um conjunto de resultados. Um conjunto de resultados é o conjunto de linhas que correspondem a um critério específico de pesquisa, enquanto um cursos é o software que retorna essas linhas ao aplicativo. O nome cursor provavelmente surgiu do cursor piscante em um terminal de computador, já que se aplica a bancos de dados. Assim como esse cursor indica a posição atual na tela e onde as palavras digitadas aparecerão, um cursor em um conjunto de resultados indica a posição atual no conjunto e qual linha será retornada.

O modelo de cursor em ODBC é baseado no modelo de cursor no SQL incorporado. Uma diferença notável entre esses modelos é a forma como os cursores são abertos. No SQL incorporado, um cursor deve ser explicitamente declarado e aberto antes de poder ser usado. No ODBC, um cursor é aberto implicitamente quando uma instrução que cria um conjunto de resultados é executada. Quando o cursor é aberto, ele é posicionado antes da primeira linha do conjunto de resultados. No SQL incorporado e no ODBC, um cursor deve ser fechado depois que o aplicativo terminar de usá-lo.

Cursores diferentes têm características diferentes. O tipo mais comum de cursor, chamado de cursor de somente avanço, só pode avançar pelo conjunto de resultados. Para retornar a uma linha anterior, o aplicativo deve fechar e reabrir o cursor e, em seguida, ler as linhas do início do conjunto de resultados até atingir a linha necessária. Os cursores de somente avanço fornecem um mecanismo rápido para fazer uma única passagem no conjunto de resultados.

Os cursores de somente avanço são menos úteis para aplicativos baseados em tela, nos quais o usuário avança e retrocede pelos dados. Esses aplicativos podem usar um cursor de somente avanço lendo o conjunto de resultados uma vez, armazenando os dados em cache localmente e executando a rolagem por conta própria. No entanto, isso só funciona bem com pequenas quantidades de dados. Uma solução melhor é usar um cursor rolável que fornece acesso aleatório ao conjunto de resultados. Esses aplicativos também podem aumentar o desempenho buscando mais de uma linha de dados por vez, usando o chamado cursor em bloco. Para obter mais informações sobre cursores em bloco, consulte Usar cursores em bloco.

O cursor de somente avanço é o tipo de cursor padrão no ODBC e é discutido nas seções a seguir. Para obter mais informações sobre cursores em bloco e cursores roláveis, consulte Cursores em bloco e Cursores roláveis.

Importante

Confirmar ou reverter uma transação, chamando explicitamente SQLEndTran ou funcionando no modo de confirmação automática, faz com que algumas fontes de dados fechem todos os cursores em todas as instruções de uma conexão. Para obter mais informações, veja os atributos SQL_CURSOR_COMMIT_BEHAVIOR e SQL_CURSOR_ROLLBACK_BEHAVIOR na descrição da função SQLGetInfo.