DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da .net Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Revista MSDN Magazine Edição 17 - Armazenando arquivos binários no SQL Server com o .Net Framework

Artigo Originalmente Publicado na MSDN Magazine Edição 17

msdn17_capa.gif

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.

 

"



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da .net Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Giovanni Bassi

Giovanni Bassi (giggio@giggio.net) é MCAD .Net e trabalha com a plataforma .Net há 3 anos. Trabalha com coordenação, análise e desenvolvimento de software e ministra treinamentos e palestras sobre .NET.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
1   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03