Como armazenar imagens no SQL Server
Nesta Matéria do Web Mundi.com, vamos esclarecer uma dúvida muito recorrente de nossos leitores sobre como armazenar imagens no SQL Server.
Existem duas formas de efetuar a gestão de imagens neste banco de dados:
Upload da imagem e armazenar o caminho da imagem no banco de dados
A Primeira forma é armazenar o caminho ou localização da imagem e em uma campo de uma tabela no banco de dados e fazer o upload da imagem no servidor.
O upload da imagem deve ser feito manualmente ou pelo sistema de front-end.
Gravar a imagem diretamente em um campo de uma tabela
A segunda forma é inserir a imagem no SQL server.
Para gravar imagens diretamente no SQL Server, utilize o tipo de dados: Varbinary (max) – que pode atingir até 2 GB.
O Aplicativo de front-end é o principal responsável pela manipulação da imagem.
Diversas Linguagens de programação possuem funções de tratamento e manipulação de imagens.
Para inserir a imagem é necessário ler, gravar num array de bytes e finalmente utilizar esse array para gravar a imagem no banco de dados.
Abaixo um exemplo de como o fazer, utilizando a linguagem de programação Visual Basic da Microsoft:
' Define a Connection String Dim myConnectionString As String = _ "Data Source=.\SQLEXPRESS;AttachDbFilename='c:\meuDatabase.mdf';Integrated Security=True;User Instance=True" Try ' Cria um novo FileStream para leitura da imagem Dim fs As New IO.FileStream("c:\imagem.jpg", IO.FileMode.Open, IO.FileAccess.Read) ' Cria um array de Bytes do tamanho do FileStream Dim ImageData(fs.Length() - 1) As Byte ' Lê os bytes do FileStream para o array criado fs.Read(ImageData, 0, ImageData.Length) ' Fecha o FileStream ficando a imagem guardada no array fs.Close() Using connection As New SqlClient.SqlConnection(myConnectionString) ' Define o commando Transact-SQL para inserir dados Dim SQL As String = "INSERT INTO contacts ([name],[img]) VALUES (@name,@img);" Dim command As New SqlClient.SqlCommand(SQL, connection) ' Define os parametros para a inserção de dados, onde está o array ' de bytes(imagem) a ser inserida. O tipo do campo é Image command.Parameters.Add("@name", SqlDbType.VarChar).Value = "renato" command.Parameters.Add("@img", SqlDbType.Image).Value = ImageData connection.Open() ' Insere os campos no SQL command.ExecuteNonQuery() End Using Catch ex As Exception MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try
Conclusão : Qual é a melhor forma de salvar imagens em um banco de dados SQL Server ?
Acreditamos que a melhor prática é utilizar efetuar somente o upload da imagem e armazenar o caminho ou local da imagem no banco de dados.
Alias, esta é a melhor prática não só para o banco de dados SQL Server como para outro tipo de banco como MySQL, Oracle, etc…
Salvar a imagem no banco de dados SQL Server irá, com o passar do tempo, tornar a base demasiadamente volumosa.
Isso aumentará, sem necessidade a carga de memoria no servidor de banco de dados, tornará o backup maior e mais demorado e aumentará o trafego de rede substancialmente.
Veja uma publicação da Microsoft com as recomendações sobre armazenamento de imagens no banco de dados SQL SERVER.
Obrigado
Espero que este artigo tenha sido útil e lhe ajudado a entender um pouco mais sobre os recursos do banco de dados SQL Server da Microsoft.
Se você gostou, compartilhe estas dicas com um amigo ou participe de nossas redes sociais.
Conhece alguma dica interessante ? Envie para nos em nossa pagina do Facebook.
Caso queira nos incentivar a criar mais conteúdos como este, prestigie nossos anunciantes.
Um Grande Abraço e até a próxima dica!
Renato Sanches
Gestor de TI – Tecnologia da Informação
Trabalhando com o banco de dados SQL Server desde 1994