Ir para o conteúdo

Inserir Imagens no SQL Server

Em dois artigos anteriores, foram abordadas algumas formas de trabalhar com dados num servidor SQL. Gestão de Dados em SQL Server - Parte I e Gestão de Dados em SQL Server - Parte II mostraram como inserir, modificar, apagar e ler dados, mas podem-se também inserir imagens e não basta simplesmente indicar qual é a imagem.

Existem duas alternativas para a gestão de imagens: guardar apenas a localização e colocar a imagem no servidor ou gravar a imagem directamente num campo.

Para inserir a imagem é necessário ler, gravar num array de bytes e finalmente utilizar esse array para gravar na base de dados.

Exemplo

Eis um exemplo de como o fazer:

        ' Define a Connection String
        Dim myConnectionString As String = _
            "Data Source=.\SQLEXPRESS;AttachDbFilename='c:\myDatabase.mdf';Integrated Security=True;User Instance=True"

        Try

            ' Cria um novo FileStream para leitura da imagem
            Dim fs As New IO.FileStream("c:\image.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 = "jpaulino"
                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