Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
A interface IRowset é a interface base do conjunto de linhas. A interface IRowset fornece métodos para obter linhas sequencialmente, obter os dados dessas linhas e gerir as linhas. Os consumidores utilizam os métodos do IRowset para todas as operações básicas de rowset. Isto inclui buscar e libertar linhas e obter valores de coluna.
Quando um consumidor obtém um ponteiro de interface num conjunto de linhas, o primeiro passo é normalmente determinar as capacidades do conjunto utilizando o método IRowsetInfo::GetProperties . Isto devolve informações sobre as interfaces expostas pelo conjunto de linhas e também as capacidades do conjunto que não aparecem como interfaces distintas, como o número máximo de linhas ativas e o número de linhas que podem ter atualizações pendentes ao mesmo tempo.
O passo seguinte para os consumidores é determinar as características, ou metadados, das colunas no conjunto de linhas. Para isso, utilizam o método IColumnsInfo para informação simples de colunas ou o método IColumnsRowset para informação de colunas estendida. O método GetColumnInfo devolve a seguinte informação:
O número de colunas no conjunto de resultados.
Um conjunto de estruturas DBCOLUMNINFO, uma por coluna.
A ordem das estruturas é a ordem em que as colunas aparecem no conjunto de linhas. Cada estrutura DBCOLUMNINFO inclui metadados da coluna, como nome da coluna, ordinal da coluna, comprimento máximo possível de um valor na coluna, tipo de dado da coluna, precisão e comprimento.
O ponteiro para um armazenamento para todos os valores das cadeias dentro de um único bloco de alocação.
O consumidor determina quais as colunas de que necessita, seja a partir dos metadados ou com base no comando de texto que gerou o conjunto de linhas. Determina os ordinais das colunas necessárias a partir da ordenação da informação das colunas devolvida pelo IColumnsInfo ou dos ordinais no conjunto de metadados da coluna devolvido pelo IColumnsRowset.
As interfaces IColumnsInfo e IColumnsRowset são usadas para extrair informação sobre as colunas do conjunto de linhas. A interface IColumnsInfo devolve um conjunto limitado de informação, enquanto IColumnsRowset fornece todos os metadados.
Observação
No SQL Server versão 7.0 e anteriores, a coluna opcional de metadados DBCOLUMN_COMPUTEMODE devolvida por IColumnsInfo::GetColumnsInfo devolve DBSTATUS_S_ISNULL (em vez dos valores que descrevem se a coluna é calculada) porque não se pode determinar se a coluna subjacente é calculada.
Os ordinais são usados para especificar uma ligação a uma coluna. Uma ligação é uma estrutura que associa um elemento da estrutura do consumidor a uma coluna. A ligação pode associar o valor dos dados, comprimento e valor de estado da coluna.
Um conjunto de fixações é reunido num acessório. Isto é criado utilizando o método IAccessor::CreateAccessor . Um acessório pode conter múltiplas ligações para que os dados de várias colunas possam ser recuperados ou definidos numa única chamada. O consumidor pode criar vários acessores para corresponder a diferentes padrões de utilização em diferentes partes da aplicação. Pode criar e libertar acessórios enquanto o conjunto de linhas permanece em atividade.
Para obter linhas da base de dados, o consumidor chama um método, como IRowset::GetNextRows ou IRowsetLocate::GetRowsAt. Estas operações de fetch colocam os dados de linha do servidor no buffer de linha do fornecedor. O consumidor não tem acesso direto ao buffer de linha do fornecedor. O consumidor utiliza IRowset::GetData para copiar dados do buffer do fornecedor para o buffer do consumidor e IRowsetChange::SetData para copiar alterações de dados do buffer do consumidor para o buffer do provedor.
O consumidor chama o método GetData e passa o handle para uma linha, o handle para um acessor e um ponteiro para um buffer atribuído pelo consumidor. O GetData converte os dados e devolve as colunas conforme especificado nas ligações usadas para criar o acessório. O consumidor pode chamar o GetData mais do que uma vez por linha, usando diferentes acessórios e buffers, podendo assim obter múltiplas cópias dos mesmos dados.
Os dados de colunas de comprimento variável podem ser tratados de várias formas. Primeiro, tais colunas podem estar ligadas a uma secção finita da estrutura do consumidor. Isto causa truncamento quando o comprimento dos dados excede o comprimento do buffer. O consumidor pode determinar que ocorreu truncamento verificando o estado DBSTATUS_S_TRUNCATED. O comprimento devolvido é sempre o comprimento verdadeiro em bytes, para que o consumidor também possa determinar quanto de dados foi truncado.
Quando o consumidor termina de buscar ou atualizar as linhas, é libertado com o método ReleaseRows . Isto liberta recursos a partir da cópia das linhas do conjunto de linhas e abre espaço para novas linhas. O consumidor pode então repetir o seu ciclo de buscar ou criar linhas e aceder aos dados nelas.
Quando o consumidor termina o conjunto de linhas, chama o método IAccessor::ReleaseAccessor para libertar qualquer acessor. Chama o método IUnknown::Release em todas as interfaces expostas pelo conjunto de linhas para libertar o conjunto de linhas. Quando o conjunto de linhas é libertado, força a libertação de quaisquer linhas ou acessórios restantes que o consumidor possa possuir.