Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«
intcontpiada : 118
Listagem de Bug's
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!
 





Por Dennes Torres
dennes@bufaloinfo.com.br
Dennes Torres possui as certificações MCAD, MCSD,MCSE, MCDBA e MCT. Atualmente atua Como diretor da Búfalo Informática, líder do grupo de usuários DevASPNet no Rio de Janeiro e membro da liderança dos grupos getWindows e devSQL, também do Rio de Janeiro, podendo sempre ser encontrado na lista de discussão do grupo DevASPNet (devaspnet-subscribe@yahoogrupos.com.br) bem como nas reuniões do grupo. Mantém dois blogs em http://cidadaocarioca.blogspot.com e http://br.thespoke.net/blogs/dennes/default.aspx

Fazendo Upload de Imagens e gravação em banco

Pesquisa personalizada
Pesquisar Dicas:






Gravação de imagens em banco é um assunto sempre polêmico e mal compreendido. Existem duas alternativas para lidarmos com imagens em nossas aplicações : Podemos gravar a imagem em um campo de banco ou podemos gravar o caminho da imagem no banco de dados. Vamos analisar estas duas opções.

Gravar a imagem no banco

A aplicação fica mais fácil de ser acessada, já que o próprio banco de dados entrega a imagem

Fica mais dificil gerenciar a base de dados devido a inserção de imagens

Gravar o caminho da imagem no banco

As aplicações client recebem o caminho da imagem, consequentemente precisam ter acesso ao local onde a imagem se encontra.

O banco de dados fica mais leve e fácil de gerenciar por não conter a imagem

Tendo exposto estas questões, vamos então ver um exemplo de como fazer gravação de imagens em banco em uma aplicação web.

Crie a seguinte tabela na base de dados :

Id Int Identity(1,1)
Nome varchar(50)
Foto Image

Neste evento precisamos preencher o parâmetro @foto. o FileUpload não se vincula diretamente com um dataSource, então precisamos fazer o preenchimento do parâmetro por código.

Observe que precisamos também alterar o tipo do parâmetro. O tipo default do parâmetro definido pelo sqlDataSource é interpretado como sqlVariant ao ser enviado para o banco de dados e SqlVariant e Image não são diretamente compatíveis. Então alteramos o tipo do parâmetro para garantir que a gravação funcione.

Veja como fica :

 

    1     Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Inserting

    2 

    3         Dim fu As FileUpload

    4         fu = FormView1.FindControl("fileupload1")

    5         e.Command.Parameters("@foto").DbType = Data.DbType.Binary

    6 

    7         e.Command.Parameters("@foto").Value = fu.FileBytes()

    8     End Sub

Pronto, pode testar. A inclusão de uma imagem no banco de dados já funciona.

A outra parte do processo, a exibição de uma imagem do banco de dados, nós explicamos anteriormente, de forma detalhada, em http://www.bufaloinfo.com.br/artigos/artigo200605.asp

Veja como fica o código do handler, vamos chama-lo de "exibirImagem.ashx" :

    1 Public Class ForneceImagens : Implements IHttpHandler

    2 

    3     Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

    4 

    5         Dim dr As Data.SqlClient.SqlDataReader

    6         Dim buffer(99) As Byte

    7         Dim inicio As Integer

    8         Dim lido As Integer

    9         Dim cmdFoto As New Data.SqlClient.SqlCommand

   10         Dim cn As New Data.SqlClient.SqlConnection

   11 

   12         cn.ConnectionString = ConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString

   13 

   14         cmdFoto.CommandText = "Select foto from fotos where id=@id"

   15         cmdFoto.Parameters.Add("@id", Data.SqlDbType.Int)

   16 

   17 

   18         cmdFoto.Parameters("@ID").Value = context.Request.QueryString("id")

   19 

   20         cmdFoto.Connection = cn

   21         cn.Open()

   22         dr = cmdFoto.ExecuteReader(Data.CommandBehavior.SequentialAccess)

   23 

   24 

   25         context.Response.ContentType = "image/jpeg"

   26         inicio = 0

   27         dr.Read()

   28         context.Response.BinaryWrite(dr("foto"))

   29         dr.Close()

   30         cn.Close()

   31     End Sub

   32 

   33     Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable

   34         Get

   35             Return False

   36         End Get

   37     End Property

   38 

   39 End Class

 

Por fim,criamos uma nova página para exibir a imagem.

Pronto, pode testar



Envie seus comentários sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentários nesta página

Veja abaixo os comentários já enviados :

Nome : henrique E-Mail : henrique@psa.ind.br
Bom dia Dennes

Parabens pelo artigo. So que estou com um problema na parte de Gravaçao de imagem o meu formView quando eu altero a propriedade defaultMode para Insert
o FileUpload desaparece ficando com apenas uma caixa de texto no lugar, o que estou fazendo de errado.


Atenciosamente

Henrique

Henrique
Nome : Elida E-Mail : elida_nob@yahoo.com.br
legal, mas gostaria ver uploand de imagens no codigo em asp.
Nome : Márcia E-Mail : marcia-w3@hotmail.com
Dennes,
foi simplesmente D+ o seu artigo, mto bem explicado e o melhor, funciona que é uma beleza. Era tudo que eu precisava.

Mto Obrigada,
Márcia
Nome : Graziani Zanfolin E-Mail :
Cara,

Parabens pela solução, com poucas alterações armazenei somente o caminho e a imagem em uma pasta a parte...

Abraços....