veaoum Posted May 1, 2013 at 12:49 AM Report #505413 Posted May 1, 2013 at 12:49 AM 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
Blackvelvet Posted May 1, 2013 at 03:42 PM Report #505465 Posted May 1, 2013 at 03:42 PM (edited) 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 May 1, 2013 at 03:46 PM by Blackvelvet
veaoum Posted May 1, 2013 at 04:11 PM Author Report #505472 Posted May 1, 2013 at 04:11 PM 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
Blackvelvet Posted May 1, 2013 at 04:19 PM Report #505475 Posted May 1, 2013 at 04:19 PM 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
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now