Armazenando arquivos binários no SQL Server com o .Net Framework

Veremos que tipo de dados o SQL Server 2000 utiliza para armazenar dados binários extensos; como serializar e deserializar arquivos binários e trabalharemos em um projeto exemplo.

Clique aqui para ler todos os artigos desta edição

 

Armazenando arquivos binários no SQL Server com o .Net Framework

por Giovanni Bassi

Este artigo discute

Este artigo usa as seguintes tecnologias:

·O tipo de dados Image do SQL Server

·As classes de serialização do .Net Framework

·Stored Procedures no SQL Server

·ADO.Net

SQL Server 2000, .Net Framework e VB.Net

 

Download:

SQLBin.Zip (32KB)

Chapéu

SQL Server 2000 e .Net Framework

 

 

Freqüentemente nos deparamos com a necessidade de relacionar arquivos binários a uma base de dados. Um catálogo pode conter fotos dos produtos, um gerenciador de recursos humanos pode conter fotos dos funcionários e às vezes simplesmente precisamos armazenar arquivos referentes a um processo qualquer de maneira eficiente. Esse artigo demonstrará que é possível fazer isso de forma a aproveitar toda a escalabilidade, produtividade e eficiência que já possuímos com o SQL Server e ainda ganhar na arquitetura do sistema, fazendo uso de funcionalidades disponibilizadas apenas por um Sistema Gerenciador de Banco de Dados, como a manutenção da integridade referencial e a segurança. Tudo isso utilizando somente o código gerenciado do .Net Framework, sem chamadas a APIs externas. Para isso, veremos que tipo de dados o SQL Server 2000 utiliza para armazenar dados binários extensos; veremos também como serializar e deserializar arquivos binários e por fim trabalharemos em um projeto exemplo.

 

O tipo de dados Image do SQL Server

O SQL Server armazena e gerencia dados binários como qualquer outro tipo de dados. Existe um tipo de dados no SQL Server especialmente criado para armazenar dados binários de tamanho variável. Este é o tipo de dados Image, que apesar do nome, não serve para armazenar apenas imagens, mas qualquer dado binário. O tipo Image não realiza nenhuma alteração nos dados recebidos e não diferencia os dados de acordo com a cultura do usuário se os conjuntos de caracteres utilizados forem diferentes. Isso quer dizer que, ao contrário do que acontece com o tipo de dados Text, dados salvos por um usuário na China terão exatamente a mesma interpretação quando solicitados por um usuário no Brasil, uma vez que não são traduzidos para nenhum outro conjunto de caracteres. O tipo de dados Image permite armazenar até 2 GB de dados.

Existe um mito quanto ao armazenamento de dados tão extensos no SQL Server. Teme-se que tal armazenamento afete o desempenho do banco de dados, atrapalhando as procuras e ficando no caminho dos outros dados. Isso seria uma realidade se os campos do tipo Image fossem armazenados em páginas de dados do SQL Server, o que não acontece. Tipos de dados de grande tamanho (incluídos aí também os tipos Text e nText) são armazenados em tipos de páginas diferentes das páginas de dados comuns do SQL Server. Dessa forma as procuras regulares são feitas apenas nas páginas de dados, não afetando o desempenho. Ainda assim, ambos os dados residem, a princípio, no mesmo arquivo físico de dados. Nada nos impede, no entanto, que criemos um novo grupo de arquivos para a base de dados e fazendo parte deste novo grupo um novo arquivo e associemos os campos com tipos de dados extensos a esse novo grupo. Isso também permitiria saber facilmente quanto espaço estamos alocando para esse tipo de dados.

 

Como funciona

O processo de transferência dos dados do sistema de arquivos para o SQL Server resume-se a poucas ações. Após o arquivo a ser transferido ter sido localizado ele é aberto para leitura e então serializado para um vetor de bytes. Esse vetor então é passado como parâmetro para uma stored procedure do banco de dados, que cuida de inseri-lo no devido campo de tipo Image da Base de Dados.

O processo de leitura destes dados é exatamente o inverso. Através de uma chamada SQL, lê-se a linha do SQL Server contendo o campo do tipo Image. Esse campo é passado para um vetor de bytes que é então gravado para um arquivo no sistema de arquivos do Windows.

Todo esse trabalho é dividido por dois Namespaces do .Net Framework: System.IO e System.Data.

 

" [...] continue lendo...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados