INSERIR IMAGENS

BLACKVELVET 12/03/2012 14:53:57
#396986
Boas.
Na aplicação que estou a fazer, necessito de colocar uma fotos para ficarem registadas. O problema é que essas fotos,mais tarde vão ser precisas para serem visionadas futuramente.
Duvida nº 1: Como coloco as fotos na bd?

Duvida nº 2: Como faço para depois visionar as fotos?

Tenho codigo para buscar as fotos,mas o resto não consigo fazer porque dá erro atras de erro

Codigo para ir buscar as fotos


Private Sub btnFotoSeloWindows_Click(sender As System.Object, e As System.EventArgs) Handles btnFotoSeloWindows.Click
dlgFicheiro.Title = [Ô]Seleccionar Ficheiro[Ô]
dlgFicheiro.InitialDirectory = CurDir()
dlgFicheiro.Filter = [Ô]Ficheiros de imagem|*.jpg[Ô]

If dlgFicheiro.ShowDialog = Windows.Forms.DialogResult.OK Then
pbxSeloWindows.Image = New Bitmap(dlgFicheiro.FileName)
End If
End Sub

Private Sub btnFotoSeloOffice_Click(sender As System.Object, e As System.EventArgs) Handles btnFotoSeloOffice.Click
dlgFicheiro.Title = [Ô]Seleccionar Ficheiro[Ô]
dlgFicheiro.InitialDirectory = CurDir()
dlgFicheiro.Filter = [Ô]Ficheiros de imagem|*.jpg[Ô]

If dlgFicheiro.ShowDialog = Windows.Forms.DialogResult.OK Then
pbxSeloOffice.Image = New Bitmap(dlgFicheiro.FileName)
End If
End Sub

como podem ver são 2 botoes para 1 foto cada.

Agora eu queria colocar essas fotos em BD para mais tarde poder vizualizar.

Para o insert tenho o seguinte codigo:

Private Sub btnok_Click(sender As System.Object, e As System.EventArgs) Handles btnok.Click
[ô] Define a Connection String
Dim myConnectionString As String = _
[Ô]Data Source=.\SQLEXPRESS; Initial Catalog=GestInformatica; Integrated Security=SSPI;[Ô]
Try

[ô] Cria um novo FileStream para leitura da imagem
Dim fs As New IO.FileStream(Application.StartupPath & [Ô]\*.jpg[Ô], IO.FileMode.Open, IO.FileAccess.Read) [ô] erro na pasta

[ô] 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 foto ([fotoffice],[fotowin]) VALUES (@fotoffice,@fotowin);[Ô]
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([Ô]@fotoffice[Ô], SqlDbType.Image).Value = ImageData
command.Parameters.Add([Ô]@fotowin[Ô], SqlDbType.Image).Value = ImageData

connection.Open()

[ô] Insere os campos no SQL
command.ExecuteNonQuery()

End Using
MsgBox([Ô] Registo inserido com sucesso [Ô], MsgBoxStyle.Information)
Catch ex As Exception
MessageBox.Show([Ô]A operação efectuada não retomou qualquer resultado.[Ô])
End Try
Me.Close()
registo.Show()

End Sub

mas está a dar erros.

Podem-me ajudar ? Agradecia muito
BLACKVELVET 13/03/2012 13:05:03
#397064
Óh pessoal...
Alguem me pode dar um exemplo de como inserir uma foto numa tabela?

Agradecia a ajuda.

Já não sei onde procurar mais ajuda
KERPLUNK 13/03/2012 14:14:20
#397067
Sinceramente, eu aconselho criar uma pasta acessível para sua aplicação, colocar as fotos lá e gravar no banco de dados somente o caminho e nome da imagem. Gravar imagem no banco de dados, é uma péssima idéia, visto que faz seu banco de dados inchar feito um balão em um período bem curto de tempo...
BLACKVELVET 13/03/2012 14:45:45
#397070
Olá KERPLUNK

Agradeço a sua ajuda, e ja agora podes colocar um exemplo de codigo como eu posso fazer isso?



KERPLUNK 13/03/2012 14:50:52
#397072
Excetuando a parte relativa a abria a caixa de diálogo e abrir a imagem, a parte em que inseres os valores no banco de dados:
[ô] Define o commando Transact-SQL para inserir dados
Dim SQL As String = [Ô]INSERT INTO foto ([fotoffice],[fotowin]) VALUES (@fotoffice,@fotowin);[Ô]
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([Ô]@fotoffice[Ô], SqlDbType.Image).Value = ImageData
command.Parameters.Add([Ô]@fotowin[Ô], SqlDbType.Image).Value = ImageData

Fica praticamente igual, a diferença é que a tabela foto, conterá campos VarChar, que conterão o caminho e nome da imagem... de resto é praticamente igual o que tu já tens.
BLACKVELVET 13/03/2012 15:10:58
#397078

Muito bem. Vou experimentar então

Obrigado pela ajuda

Depois direi alguma coisa

BLACKVELVET 13/03/2012 15:30:15
#397084
Ora viva mais uma vez.

Estive a experimentar a fazer as alterações á tabela,mas esta não deixa mudar de Image para Varchar

Continuo a ter erro aqui:
Dim fs As New IO.FileStream(Application.StartupPath, IO.FileMode.Open, IO.FileAccess.Read) [ô] erro [Ô]Access to the path ... is denied.[Ô]

Alguma sugestão?
KERPLUNK 13/03/2012 15:31:42
#397086
[Ô]Access to the path ... is denied. [Ô] significa que não tens acesso à pasta que está tentando abrir...
BLACKVELVET 13/03/2012 15:53:03
#397089
Eu estou a criar uma aplicação para a gestão de um parque informatico. E eu quero tirar fotos aos selos para guarda-los, porque eu vou inserir na mesma os serials e as fotos é para comprovar que realmente o serial é valido,visto que é para uma empresa.
Estás agora a perceber o que eu pretendo?
Eu tiro fotos aos selos do windows e do office e quero guarda-las ou em uma pasta ou na BD
Buscar as fotos a um sitio e guarda-las , por exemplo, na pasta da aplicação.....

Ou aconselhas de outra maneira?
Tópico encerrado , respostas não são mais permitidas