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)