Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

veaoum

colocar imagens em BD

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por Blackvelvet

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.