Jump to content
veaoum

colocar imagens em BD

Recommended Posts

veaoum

Boa noite! Precisava da vossa ajuda pois tenho que guardar umas fotos numa base de dados e o método que usei a uns tempos atras não me agrada,

O que eu faço é:

1º crio uma função que é:

Public Function fazfoto(ByVal caminho As String) As Image
	Dim img As Image
	Dim img2 As Bitmap
	img = Image.FromFile(caminho)
	img2 = New Bitmap(img)
	img.Dispose()
	Return (img2)
End Function

2º coloco o seguinte codigo num botão para mostrar a foto:

Private Sub btmfoto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmfoto.Click
	Carrega_foto.Filter = "foto do Socio|*.jpg"
	If Carrega_foto.ShowDialog = System.Windows.Forms.DialogResult.OK Then
		btmfoto.BackgroundImage = fazfoto(Carrega_foto.FileName)
		btmfoto.Text = ""
	End If
End Sub

3º quando guardo toda a informaçã tenho que colocar a imagem numa pasta e guardar na base de dados o caminho para a foto.

Será que alguém podia-me explicar como insiro fotos directamente na base de dados e como é que as mostro depois? É que já andei a pesquisa e não encontrei por isso é que fiz da forma que está em cima, mas acho que fica "sujo" o código

Share this post


Link to post
Share on other sites
Blackvelvet

Boas

Quando estive em estagio,tive que guardar as fotos em bd,mas não em pasta, porque a imagem ja estava em pasta e era so adicionar em bd. para tal fiz o seguinte:


'inserir imagem na bd
If Len(dlgFicheiro2.FileName) <> 0 Then
		 arqImgem = New FileStream(dlgFicheiro2.FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
		 oImgem = New StreamReader(arqImgem)
	 End If
'declarei um vetor de bytes para armazenar o conteúdo da imagem a ser salva/ foto
	 Dim arquivoByteArray(arqImgem.Length - 1) As Byte
	 arqImgem.Read(arquivoByteArray, 0, arqImgem.Length)
	 command.Parameters.Add("@foto", SqlDbType.VarBinary, arqImgem.Length).Value = arquivoByteArray

Chamo a atenção que as imagens/fotos ja estavam em pasta e era so preciso buscar-la para inserir na bd. Podes sempre fazer o mesmo

Espero que te seja util.

Um abraço

Edited by Blackvelvet

Share this post


Link to post
Share on other sites
veaoum

Boas

Quando estive em estagio,tive que guardar as fotos em bd,mas não em pasta, porque a imagem ja estava em pasta e era so adicionar em bd. para tal fiz o seguinte:


'inserir imagem na bd
If Len(dlgFicheiro2.FileName) <> 0 Then
		 arqImgem = New FileStream(dlgFicheiro2.FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
		 oImgem = New StreamReader(arqImgem)
	 End If
'declarei um vetor de bytes para armazenar o conteúdo da imagem a ser salva/ foto
	 Dim arquivoByteArray(arqImgem.Length - 1) As Byte
	 arqImgem.Read(arquivoByteArray, 0, arqImgem.Length)
	 command.Parameters.Add("@foto", SqlDbType.VarBinary, arqImgem.Length).Value = arquivoByteArray

Chamo a atenção que as imagens/fotos ja estavam em pasta e era so preciso buscar-la para inserir na bd. Podes sempre fazer o mesmo

Espero que te seja util.

Um abraço

Podes ajudar-me a perceber o código, principalmente a parte a seguir ao end if.... Fiquei a nora... Obrigado

Share this post


Link to post
Share on other sites
Blackvelvet

Para a imagem ser inserida na bd converti a imagem em vetores, depois, na insreção criei um array de bytes para "organizar" os vectores e assim consegues ver a imagem na tabela.

vou-te deixar o codigo todo da aplicação do estagio, para perceberes bem o que fiz.

Private Sub btnInserir_Click(sender As System.Object, e As System.EventArgs) Handles btnInserir.Click
    Try
	    Dim arqImg As FileStream
	    Dim rImg As StreamReader
	    Dim arqImgem As FileStream ' para a foto do selo do windows
	    Dim oImgem As StreamReader ' para a foto do selo do windows
	    ' Texto de ligação à base de dados
	    Dim myConnectionString As String = _
		 "Data Source=.\SQLEXPRESS; Initial Catalog=Parque; Integrated Security=SSPI;"
	    'inserir imagem na bd
	    If Len(dlgFicheiro.FileName) <> 0 Then
		    arqImg = New FileStream(dlgFicheiro.FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
		    rImg = New StreamReader(arqImg)
	    End If
	    'inserir imagem na bd foto selo windows
	    If Len(dlgFicheiro2.FileName) <> 0 Then
		    arqImgem = New FileStream(dlgFicheiro2.FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
		    oImgem = New StreamReader(arqImgem)
	    End If
	    ' Comando que irá inserir dados na tabela "Parque"  os campos
	    'que são passados através de parâmetros
	    Dim SQL As String = "INSERT INTO gest_ao ([fotoWin],[fotoOffice],[empresa],[nome_rede],[utilizador],[local],[departamento],[visivel_rede],[sistema_operativo],[licenca_win],[office],[licenca_office],[numero_office],[autenticacao],[office_audit],[equipamento],[server_cal],[ex_cal],[sql_cal],[user_baan],[remote_desktop],[user_internet],[observacao]) VALUES (@fotoWin,@fotoOffice,@empresa, @nome_rede,@utilizador,@local,@departamento,@visivel_rede,@sistema_operativo,@licenca_win,@office,@licenca_office,@numero_office,@autenticacao,@office_audit,@equipamento,@server_cal,@ex_cal,@sql_cal,@user_baan,@remote_desktop,@user_internet,@observacao);"
	    ' Cria uma nova ligação à base de dados
	    Dim connection As New SqlConnection(myConnectionString)
	    ' Criação do comando indicando a instrução e a ligação
	    Dim command As New SqlCommand(SQL, connection)
	    ' Indicação dos parâmetros que serão inseridos
	    command.Parameters.Add("@empresa", SqlDbType.VarChar).Value = cbxEmpresa.Text
	    command.Parameters.Add("@nome_rede", SqlDbType.VarChar).Value = txtNomeRede.Text
	    command.Parameters.Add("@utilizador", SqlDbType.VarChar).Value = txtUtilizador.Text
	    command.Parameters.Add("@local", SqlDbType.VarChar).Value = cbxLocal.Text
	    command.Parameters.Add("@departamento", SqlDbType.VarChar).Value = cbxDepartamento.Text
	    command.Parameters.Add("@visivel_rede", SqlDbType.Int).Value = cbxVisivel_Rede.SelectedIndex
	    command.Parameters.Add("@sistema_operativo", SqlDbType.VarChar).Value = txtSO.Text
	    command.Parameters.Add("@licenca_win", SqlDbType.VarChar).Value = txtSeloWindows.Text
	    command.Parameters.Add("@office", SqlDbType.VarChar).Value = txtOffice.Text
	    command.Parameters.Add("@licenca_office", SqlDbType.VarChar).Value = txtSeloOffice.Text
	    command.Parameters.Add("@numero_office", SqlDbType.VarChar).Value = txtNOffice.Text
	    command.Parameters.Add("@autenticacao", SqlDbType.VarChar).Value = cbxLegal.Text
	    command.Parameters.Add("@office_audit", SqlDbType.VarChar).Value = txtOfficeAuditoria.Text
	    command.Parameters.Add("@equipamento", SqlDbType.VarChar).Value = cbxEquipamento.Text
	    command.Parameters.Add("@server_cal", SqlDbType.Int).Value = cbxServer.SelectedIndex
	    command.Parameters.Add("@ex_cal", SqlDbType.Int).Value = cbxEX.SelectedIndex
	    command.Parameters.Add("@sql_cal", SqlDbType.Int).Value = cbxSQL.SelectedIndex
	    command.Parameters.Add("@user_baan", SqlDbType.VarChar).Value = cbxUserBaan.Text
	    command.Parameters.Add("@remote_desktop", SqlDbType.VarChar).Value = cbxRemote_Desktop.Text
	    command.Parameters.Add("@user_internet", SqlDbType.VarChar).Value = cbxUserInternet.Text
	    'declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva/ foto selo windows
	    Dim arquivoByteArray(arqImgem.Length - 1) As Byte
	    arqImgem.Read(arquivoByteArray, 0, arqImgem.Length)
	    command.Parameters.Add("@fotoWin", SqlDbType.VarBinary, arqImgem.Length).Value = arquivoByteArray
	    'declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva
	    Dim arqByteArray(arqImg.Length - 1) As Byte
	    arqImg.Read(arqByteArray, 0, arqImg.Length)
	    command.Parameters.Add("@fotoOffice", SqlDbType.VarBinary, arqImg.Length).Value = arqByteArray
	    command.Parameters.Add("@observacao", SqlDbType.VarChar).Value = txtObservacoes.Text
	    ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos
	    connection.Open()
	    Dim x As Integer = command.ExecuteNonQuery()
	    If x < 1 Then
	    End If
	    ' Fecha a ligação e limpa as variáveis
	    connection.Close()
	    connection = Nothing
	    command = Nothing
	    MsgBox(" Registo inserido com sucesso", MsgBoxStyle.Information)
    Catch ex As Exception
	    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
    End Try
    inicio.Show()
   End Sub

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.