

| com exemplos em VB |
| Componente para deixar forms em Vb semelhantes às telas do winnamp |
| Componente para colocar sua aplicação VB no Systray |
| Componente para transformar sua aplicação VB em serviço |
| Ferramentas úteis para quem usa Olap Server |
| |

![]() |
||||||||
|
|
||||||||
Por Dennes
Torres dennes@bufaloinfo.com.brDennes 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 | |
|
|
|
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
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.... |
|