Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A interface IRowset é a interface de conjunto de linhas base. A interface IRowset fornece métodos para buscar linhas sequencialmente, obter os dados dessas linhas e gerenciar linhas. Os consumidores usam os métodos no IRowset para todas as operações básicas de conjunto de linhas. Isso inclui buscar e liberar linhas e obter valores de coluna.
Quando um consumidor obtém um ponteiro de interface em um conjunto de linhas, a primeira etapa normalmente é determinar os recursos do conjunto de linhas usando o método IRowsetInfo::GetProperties . Isso retorna informações sobre as interfaces expostas pelo conjunto de linhas e também os recursos do conjunto de linhas 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.
A próxima etapa para os consumidores é determinar as características ou metadados das colunas no conjunto de linhas. Para isso, eles usam o método IColumnsInfo para informações de coluna simples ou o método IColumnsRowset para obter informações de coluna estendidas. O método GetColumnInfo retorna as seguintes informações:
O número de colunas no conjunto de resultados.
Uma matriz de estruturas DBCOLUMNINFO, uma por coluna.
A ordem das estruturas é a ordem na qual as colunas aparecem no conjunto de linhas. Cada estrutura DBCOLUMNINFO inclui metadados de coluna, como nome da coluna, ordinal da coluna, comprimento máximo possível de um valor na coluna, tipo de dados da coluna, precisão e comprimento.
O ponteiro para um armazenamento para todos os valores de cadeia de caracteres em um único bloco de alocação.
O consumidor determina quais colunas ele precisa dos metadados ou com base no comando de texto que gerou o conjunto de linhas. Ele determina os ordinais das colunas necessárias da ordenação das informações de coluna retornadas por IColumnsInfo ou dos ordinais no conjunto de linhas de metadados de coluna retornado por IColumnsRowset.
As interfaces IColumnsInfo e IColumnsRowset são usadas para extrair informações sobre as colunas no conjunto de linhas. A interface IColumnsInfo retorna um conjunto limitado de informações, enquanto IColumnsRowset fornece todos os metadados.
Observação
No SQL Server versão 7.0 e anterior, a coluna de metadados opcional DBCOLUMN_COMPUTEMODE retornada por IColumnsInfo::GetColumnsInfo retorna DBSTATUS_S_ISNULL (em vez dos valores que descrevem se a coluna é computada) porque não pode ser determinado se a coluna subjacente é computada.
Os ordinais são usados para especificar uma associação a uma coluna. Uma associação é uma estrutura que associa um elemento da estrutura do consumidor a uma coluna. A associação pode associar o valor de dados, o comprimento e o valor de status da coluna.
Um conjunto de associações é reunido em um acessador. Isso é criado usando o método IAccessor::CreateAccessor . Um acessador pode conter várias associações para que os dados de várias colunas possam ser recuperados ou definidos em uma única chamada. O consumidor pode criar vários acessadores para corresponder a diferentes padrões de uso em diferentes partes do aplicativo. Ele pode criar e liberar acessadores enquanto o conjunto de linhas permanece existente.
Para buscar linhas do banco de dados, o consumidor chama um método, como IRowset::GetNextRows ou IRowsetLocate::GetRowsAt. Essas operações de busca colocam dados de linha do servidor no buffer de linha do provedor. O consumidor não tem acesso direto ao buffer de linha do provedor. O consumidor usa IRowset::GetData para copiar dados do buffer do provedor para o buffer do consumidor e IRowsetChange::SetData para copiar as alterações de dados do buffer do consumidor para o buffer do provedor.
O consumidor chama o método GetData e passa o identificador para uma linha, o identificador para um acessador e um ponteiro para um buffer alocado pelo consumidor. GetData converte os dados e retorna as colunas conforme especificado nas associações usadas para criar o acessador. O consumidor pode chamar GetData mais de uma vez para uma linha, usando diferentes acessadores e buffers e, portanto, o consumidor pode obter várias cópias dos mesmos dados.
Os dados de colunas de comprimento variável podem ser tratados de várias maneiras. Primeiro, essas colunas podem ser associadas a uma seção finita da estrutura do consumidor. Isso causa truncamento quando o comprimento dos dados excede o comprimento do buffer. O consumidor pode determinar que o truncamento ocorreu verificando se o status DBSTATUS_S_TRUNCATED. O comprimento retornado é sempre o comprimento verdadeiro em bytes, para que o consumidor também possa determinar a quantidade de dados truncada.
Quando o consumidor terminar de buscar ou atualizar linhas, ele as libera com o método ReleaseRows . Isso libera recursos da cópia das linhas no conjunto de linhas e abre espaço para novas linhas. Em seguida, o consumidor pode repetir seu ciclo de busca ou criação de linhas e acessar os dados neles.
Quando o consumidor é concluído com o conjunto de linhas, ele chama o método IAccessor::ReleaseAccessor para liberar qualquer acessador. Ele chama o método IUnknown::Release em todas as interfaces expostas pelo conjunto de linhas para liberar o conjunto de linhas. Quando o conjunto de linhas é liberado, ele força a liberação de quaisquer linhas ou acessadores restantes que o consumidor possa manter.