Armazenando arquivos em modo binário no Banco SQL Server.

É possível armazenar arquivos no banco de dados de duas maneiras:

  • Referência: O arquivo é salvo em um diretório ou compartilhamento via rede através de sua referência. Exemplo: O arquivo MSDN.PNG está no diretório Z:\Imagens\, logo a referência armazenada no campo será Z:\Imagens\MSDN.PNG.
  • Arquivo: O arquivo é salvo diretamente na tabela do banco de dados.

Neste artigo, demonstraremos como salvar um arquivo diretamente no banco de dados SQL Server, utilizando um campo na tabela do tipo varbinary(max). Este campo suporta dados binários de comprimento variável, com tamanho máximo aproximado de 2GB.

No SQL Server, objetos binários grandes (BLOB – Binary Large Object) podem ser do tipo dados varbinary(max) padrão, que armazenam os dados em tabelas, ou do tipo objetos varbinary(max) FILESTREAM, que armazenam os dados no sistema de arquivos. No exemplo abaixo, utilizaremos o tipo varbinary(max) padrão.

1. Criando a tabela para armazenamento dos arquivos
Para criar a tabela no SQL Server Management Studio, foi utilizada a seguinte sintaxe:

CREATE TABLE Arquivos
(
    Id int,
    Nome varchar(50) not null,
    Arquivo varbinary(max) not null
)


2. Inserindo dados na tabela

Após a criação da tabela, utilize o comando OpenRowSet em conjunto com a opção Bulk para inserir o arquivo desejado:

INSERT INTO Arquivos (Id, Nome, Arquivo)
Select 1, ‘file1.pdf’, BulkColumn
FROM Openrowset( Bulk ‘C:\Relatorio1.pdf’, Single_Blob) as Arquivo

3. Integrando leitura e gravação dos arquivos a partir do Elipse E3
Antes de tudo, é necessário criar um objeto Banco de Dados no Elipse E3, para só então realizar as operações de escrita e leitura via E3Query e scripts.

Para inserir o arquivo no banco de dados, foi utilizada a seguinte cláusula SQL em uma consulta:

Para enviar o arquivo, será necessário executar a consulta que contém as variáveis a serem substituídas.

O seguinte script pode ser utilizado:

If Application.ShowFilePicker(true, File,, 128, "Todos os arquivos|*.*") Then
   VarPath = File
   VarFileName = InputBox("File Name (Ex: file1.pdf, file1.doc, picture.png...)") 
Set Consulta = Screen.Item("Insert")
Consulta.SetVariableValue "FileName", VarFileName
Consulta.SetVariableValue "Path", VarPath
Screen.Item("Insert").Execute(true)
End If

Para ler os dados binários do sistema de arquivos que estão salvos no banco, utilizaremos o componente ADODB.Stream, que tem a capacidade de ler estes dados para posterior armazenamento em disco local. O seguinte script e consulta SQL foram utilizados:

 

Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
arquivo = InputBox("File Name:")
'Consulta que busca o valor binário do banco
Screen.Item("Consulta1").SetVariableValue "NomeVar", arquivo
set rs = Screen.Item("Consulta1").GetADORecordset()
bin = rs.Fields.Item("Arquivo").Value

 

Set outputStream = CreateObject("ADODB.Stream")
outputStream.Type = 1 ' adTypeBinary
outputStream.Open
outputStream.Write bin
outputStream.SaveToFile "C:\" & arquivo, adSaveCreateOverWrite

Para maiores informações, consulte a aplicação demo em anexo, desenvolvida na versão 4.7 build 300 do Elipse E3 em conjunto com o SQL Server 2008 R2.

NOTA: Para que o exemplo desenvolvido funcione corretamente, é preciso que o Banco de Dados SQL Server esteja instalado no computador local (ou em outro da mesma rede que permita acesso). Então, configure o objeto Banco de Dados (BancoDados1) existente na aplicação, e crie a tabela que armazenará os arquivos.

Anexos:

5381.zip

Este artigo foi útil? Was this post helpful?
Yes1
No0

Comentários em “Armazenando arquivos em modo binário no Banco SQL Server.

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *