Compartilhar via


Conjunto de registros: trabalhando com itens de dados grandes (ODBC)

Este tópico se aplica às classes ODBC do MFC e às classes MFC DAO.

Observação

Se estiver usando as classes MFC DAO, gerencie seus itens de dados grandes com a classe CByteArray em vez da classe CLongBinary. Se estiver usando as classes ODBC do MFC com busca de linha em massa, use CLongBinary em vez de CByteArray. Para obter mais informações sobre busca de linhas em massa, confira Conjunto de registros: buscando registros em massa (ODBC).

Suponha que seu banco de dados possa armazenar grandes partes de dados, como bitmaps (fotografias de funcionários, mapas, imagens de produtos, objetos OLE e assim por diante). Esse tipo de dados geralmente é chamado de objeto binário grande (ou BLOB) porque:

  • Cada valor de campo é grande.

  • Ao contrário de números e outros tipos de dados simples, ele não tem um tamanho previsível.

  • Os dados são sem forma da perspectiva do seu programa.

Este tópico explica o suporte que as classes de banco de dados oferecem para trabalhar com esses objetos.

Gerenciando objetos grandes

Os conjuntos de registros têm duas maneiras de resolver a dificuldade especial de gerenciar objetos binários grandes. Você pode usar as classes CByteArray ou CLongBinary. Em geral, CByteArray é a maneira preferencial de gerenciar dados binários grandes.

CByteArray requer mais sobrecarga do que CLongBinary, mas é mais capaz, conforme descrito na classe CByteArray. CLongBinary é descrito brevemente na classe CLongBinary.

Para obter informações detalhadas sobre como usar o CByteArray para trabalhar com itens de dados grandes, consulte a Nota Técnica 45.

Classe CByteArray

CByteArray é uma das classes de coleção MFC. Um objeto CByteArray armazena uma matriz dinâmica de bytes: a matriz pode crescer, se necessário. A classe oferece acesso rápido por índice, como com matrizes C++ internas. os objetos CByteArray podem ser serializados e despejados para fins de diagnóstico. A classe oferece funções de membro para obter e definir bytes especificados, inserir e acrescentar bytes e remover um byte ou todos os bytes. Essas instalações facilitam a análise dos dados binários. Por exemplo, se o objeto binário for um objeto OLE, talvez seja necessário trabalhar em alguns bytes de cabeçalho para alcançar o objeto real.

Usando CByteArray em Recordsets

Ao oferecer um membro de dados de campo do conjunto de registros do tipo CByteArray, você oferece uma base fixa da qual o RFX pode gerenciar a transferência desse objeto entre o conjunto de registros e a fonte de dados e por meio da qual você pode manipular os dados dentro do objeto. O RFX precisa de um site específico para recuperar dados e você precisa de uma maneira de acessar os dados subjacentes.

Para obter informações detalhadas sobre como usar o CByteArray para trabalhar com itens de dados grandes, consulte a Nota Técnica 45.

Classe CLongBinary

Um objeto CLongBinary é um shell simples em torno de um identificador HGLOBAL para um bloco de armazenamento alocado no heap. Quando ele associa uma coluna de tabela que contém um objeto binário grande, o RFX aloca o identificador HGLOBAL quando precisa transferir os dados para o conjunto de registros e armazena o identificador no campo CLongBinary do conjunto de registros.

Por sua vez, você usa o identificador HGLOBAL, m_hData, para trabalhar com os próprios dados, operando-os como faria em qualquer identificador de dados. É aqui que CByteArray adiciona recursos.

Cuidado

Objetos CLongBinary não podem ser usados como parâmetros em chamadas de função. Além disso, sua implementação, que chama ::SQLGetData, retarda necessariamente o desempenho de rolagem de um instantâneo rolável. Isso também pode ser verdadeiro quando você usa uma chamada ::SQLGetData por conta própria para recuperar colunas de esquema dinâmico.

Confira também

Conjunto de registros (ODBC)
Conjunto de registros: obtendo SUMs e outros resultados agregados (ODBC)
RFX (troca de campo de registro)