Compartilhar via


Biblioteca de cursores 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

Alguns drivers ODBC dão suporte apenas às configurações padrão do cursor; esses drivers também não dão suporte a operações de cursor posicionadas, como SQLSetPos. A biblioteca de cursores ODBC é um componente do MDAC (Microsoft Data Access Components) usado para implementar cursores estáticos ou em bloco em um driver que, normalmente, não dá suporte a eles. A biblioteca de cursores também implementa instruções UPDATE e DELETE posicionadas e SQLSetPos para os cursores que ela cria.

A biblioteca de cursores ODBC é implementada como uma camada entre o Gerenciador de Driver ODBC e um driver ODBC. Se a biblioteca de cursores ODBC for carregada, o Gerenciador de Driver ODBC roteará todos os comandos relacionados com o cursor à biblioteca em vez do driver. A biblioteca de cursores implementa um cursor buscando o conjunto de resultados inteiro do driver subjacente e armazenando em cache o conjunto de resultados no cliente. Ao usar a biblioteca de cursores ODBC, o aplicativo fica limitado à funcionalidade da biblioteca; qualquer suporte adicional a outras funcionalidades de cursor no driver subjacente não estará disponível para o aplicativo.

Há pouca necessidade de usar a biblioteca de cursores ODBC com o driver ODBC do SQL Server Native Client porque o driver em si dá suporte a mais funcionalidades de cursor do que a biblioteca de cursores ODBC. O único motivo para usar a biblioteca de cursores ODBC com o driver ODBC do SQL Server Native Client é porque o driver implementa seu suporte ao cursor por meio de cursores de servidor e os cursores de servidor não dão suporte a todas as instruções SQL. Sempre que houver necessidade de ter um cursor estático com procedimentos armazenados, lotes ou instruções SQL que contêm COMPUTE, COMPUTE BY, FOR BROWSE ou INTO, é recomendável usar a biblioteca de cursores ODBC. No entanto, é preciso ter cuidado ao usar a biblioteca de cursores porque ela armazena no cache do cliente o conjunto de resultados inteiro, o que pode alocar muita memória e prejudicar o desempenho.

Um aplicativo invoca a biblioteca de cursores conexão por conexão usando SQLSetConnectAttr para definir o atributo de conexão SQL_ATTR_ODBC_CURSORS antes de se conectar a uma fonte de dados. SQL_ATTR_ODBC_CURSORS é definido como um destes três valores:

SQL_CUR_USE_ODBC
Quando essa opção é definida com o driver ODBC do SQL Server Native Client, a biblioteca de cursores ODBC substitui o suporte ao cursor nativo do driver ODBC do SQL Server Native Client. Somente os tipos de cursor suportados pela biblioteca de cursores podem ser usados para a conexão; cursores de servidor não podem ser usados.

SQL_CUR_USE_DRIVER
Quando essa opção é definida, todo o suporte ao cursor nativo do driver ODBC do SQL Server Native Client pode ser usado para a conexão. A biblioteca de cursores ODBC não pode ser usada. Todos os cursores são implementados como cursores de servidor.

SQL_CUR_USE_IF_NEEDED
Quando essa opção é definida, o efeito é o mesmo que SQL_CUR_USE_DRIVER quando usado com o driver ODBC do SQL Server Native Client. No momento da conexão, o Gerenciador de Driver ODBC testa se o driver ODBC ao qual está sendo conectado dá suporte à opção SQL_FETCH_PRIOR de SQLFetchScroll. Se o driver não der suporte à opção, o Gerenciador de Driver ODBC carregará a biblioteca de cursores ODBC. Se o driver der suporte à opção, o Gerenciador não carregará a biblioteca de cursores ODBC e o aplicativo usará o suporte nativo do driver. Como o driver ODBC do SQL Server Native Client dá suporte a SQL_FETCH_PRIOR, o Gerenciador de Driver ODBC não carrega a biblioteca de cursores ODBC.

A biblioteca de cursores permite que os aplicativos usem várias instruções ativas em uma conexão, assim como cursores roláveis e atualizáveis. A biblioteca de cursores deve ser carregada para dar suporte a essa funcionalidade. Use SQLSetConnectAttr para especificar como a biblioteca de cursores deve ser usada e SQLSetStmtAttr para especificar o tipo de cursor, a simultaneidade e o tamanho do conjunto de linhas.

Confira também

Como os cursores são implementados