segunda-feira, 6 de fevereiro de 2012

Inserir arquivo em tabela do banco de dados

Armazenar imagens e arquivos em um banco de dados pode garantir uma estrutura unificada dos dados do usuário, além de facilitar a criação de rotinas de backup, uma vez que os arquivos estarão no mesmo local em que os dados de tabelas.

O SQL Server permite, a partir da versão 2005, o carregamento de arquivos em tabelas com campos do tipo image ou VARBINARY(MAX).

O Bulk OLE DB provider é capaz de realizar esta tarefa, dispensando ferramentas de carga ou outros utilitários externos ao SQL Server. Para isso é necessário utilizá-lo juntamente com a função OPENROWSET().

Veja o exemplo abaixo:

   1:  CREATE TABLE Imagem
   2:  (
   3:    id INT IDENTITY PRIMARY KEY
   4:  , nome VARCHAR(100) NOT NULL
   5:  , tipoMIME VARCHAR(20) NOT NULL
   6:  , imagem VARBINARY(MAX)
   7:  )
   8:   
   9:  INSERT INTO Imagem VALUES ('Minha imagem','image/jpeg',
   10:  (SELECT * FROM OPENROWSET(BULK 'E:\Imagem.jpg', SINGLE_BLOB) AS A))


Obs1: No exemplo, a imagem encontra-se diretamente na unidade E: da máquina onde o SQL Server está instalado.

Obs2: O campo tipoMIME foi adicionado para facilitar a identificação do tipo de arquivo caso uma aplicação precise acessá-lo.

Em breve escreverei sobre como acessar o arquivo armazenado via aplicação Asp.Net.

Até a próxima!

4 comentários:

Anônimo disse...

muito bom, e a aplicação Asp.net ja fez?

Unknown disse...

Obrigado, foi de grande ajuda para anexar meus arquivos em pdf, txt, doc, docx.

Julian disse...

Amigo, estou tendo erro de acesso negado, você tem idéia do que pode ser?
Segue msg de erro: Cannot bulk load because the file "\\julian\C\teste\img.jpg" could not be opened. Operating system error code 5(Acesso negado.).

Obrigado,
Julian

Evandro disse...

Olá Julian!

Existem várias causas para este erro. Veja se este post do MSDN pode ajudar: http://blogs.msdn.com/b/jay_akhawri/archive/2009/02/16/resolving-operating-system-error-code-5-with-bulk-insert-a-different-perspective.aspx

Se não resolver, entre em contato novamente, para que possamos tentar uma outra abordagem.

Abs!!

Postar um comentário