Muitos leitores me enviam e-mails perguntando sobre como armazenar imagens no banco de Dados MS-SQL Server.
O que digo é que existem duas alternativas para a gestão de imagens neste banco de dados:
1. Guardar apenas a localização e colocar a imagem no servidor.
2. Gravar a imagem diretamente num campo.
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 é principal responsável pela manipulação da imagem. Diversas Linguagens possuem funções de tratamento de imagens.
Para inserir a imagem é necessário ler, gravar num array de bytes e finalmente utilizar esse array para gravar na base de dados.
Eis um exemplo de como o fazer:
‘ 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