

| 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 |
|
|
|
|
| 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.... |
|
| Nome : Renato | E-Mail : renato.amorim@br.prosegur.com |
| Artigo muito bom, mesmo, estou com um problema ve se vc pode me ajudar,por favor e se eu tiver um arrey de bytes ex: cmdFoto.CommandText = "Select foto from fotos where id=@id" cmdFoto.Parameters.Add("@id", Data.SqlDbType.Int) cmdFoto.Parameters("@ID").Value = System.Byte[] neste caso esta aparecer o seguint erro: Failed to convert parameter value from a System.Byte[] to a Byte. E então como cconverter |
|
| Nome : Dennes | E-Mail : dennes@bufaloinfo.com.br |
| Renato, Não deu para entender o que tentou fazer. Se está buscando uma foto pelo ID, deve buscar apenas uma foto. []'s Dennes |
|
| Nome : helder | E-Mail : hferrari10@gmail.com |
| Dennes vê se voce pode me ajudar o servidor me disponibilizou um codigo para fazer upload de imagem para uma pasta, porém eu preciso que o cliente faça o upload da foto e o nome do arquivo seja armazenado no banco de dados. Como devo implementar este codigo para o nome do arquivo ir para o banco obrigado <HTML> <BODY BGCOLOR="white"> <H1>aspSmartUpload : Selecione os Arquivos</H1> <HR> <% Dim mySmartUpload Dim intCount Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload") mySmartUpload.Upload intCount = mySmartUpload.Save("d:\web\tudo\www\imagens") ' sample with a physical path ' intCount = mySmartUpload.Save("c:\temp\") Response.Write(intCount & " file(s) uploaded.") %> </BODY> </HTML> |
|
| Nome : Dennes | E-Mail : dennes@bufaloinfo.com.br |
| Oi, Seu código utiliza métodos da época do ASP 3 Adapte a aplicação acima de forma a gravar o arquivo em disco e o nome dele no banco. []'s Dennes |
|
| Nome : | E-Mail : |
| Nome : | E-Mail : |