Comment puis-je Transférer une image à partir d'un picturebox à l'autre? VB.NET & SQL

0

La question

Im essayant de faire un système de connexion où je stocke les informations d'identification et un profil souhaité pic de l'image sur une base de données access. le résultat souhaité est que lorsque la connexion correspond à la forme 1 se ferme et s'ouvre en 2 avec enregistrement de l'image chargée sur un coin.

j'ai essayé de faire ce

Formulaire 1 code:

Imports System.Data.OleDb
Imports System.IO
Public Class Form1

    Private PictureFormat As String

    Private Sub FillPictureBoxFromFile()
        With OpenFileDialog1
            .Filter = "(*.jpg)|*.jpg|(*.png)|*.png"
            .RestoreDirectory = True
            .Title = "Select a file to open"
            If .ShowDialog = DialogResult.OK Then
                PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
            End If
            PictureFormat = Path.GetExtension(OpenFileDialog1.FileName)
        End With
    End Sub

    Private cnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\geral\source\repos\Login Fase 3 Final\Login Fase 3 Final\bin\Release\DBLoginPic.mdb"

    Private Sub saveimage()
        Dim arrimage() As Byte
        Using mstream As New System.IO.MemoryStream
            If PictureFormat.ToLower = ".png" Then
                PictureBox1.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Png)
            ElseIf PictureFormat.ToLower = ".jpg" Then
                PictureBox1.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
            End If
            arrimage = mstream.GetBuffer()
            Dim Filesize As Long
            Filesize = mstream.Length
        End Using
        Using con As New OleDbConnection(cnStr),
                cmd As New OleDbCommand("Insert into TBLoginPic (Imagen) Values (@Imagen)", con)
            With cmd
                .Parameters.Add("@Imagen", OleDbType.Binary).Value = arrimage
                '.Parameters.Add("@Nombre", OleDbType.VarChar).Value = TextBox1.Text
                con.Open()
                .ExecuteNonQuery()
            End With
        End Using
    End Sub

    Private Function GetDataByName(name As String) As DataTable
        Dim dt As New DataTable
        Using conn As New OleDb.OleDbConnection(cnStr),
                cmd As New OleDbCommand("Select * from TBLoginPic where Usuario= @Buscar", conn)
            cmd.Parameters.Add("@Buscar", OleDbType.VarChar).Value = TBusuario.Text
            conn.Open()
            Using reader = cmd.ExecuteReader
                dt.Load(reader)
            End Using
        End Using
        Return dt
    End Function


    Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click

    End Sub

    Private Sub TBusuario_TextChanged(sender As Object, e As EventArgs) Handles TBusuario.TextChanged

    End Sub

    Private Sub TBcontraseña_TextChanged(sender As Object, e As EventArgs) Handles TBcontraseña.TextChanged

    End Sub

    Private Sub BtnLoguearse_Click(sender As Object, e As EventArgs) Handles BtnLoguearse.Click
        If Me.TBLoginPicTableAdapter.BuscarDatos(Me.DBLoginPicDataSet.TBLoginPic, TBusuario.Text, TBcontraseña.Text) Then

            Dim dt As DataTable
            Try
                dt = GetDataByName(TBusuario.Text)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Exit Sub
            End Try

            TBusuario.Text = dt(0)("Usuario").ToString
            Dim arrimage = DirectCast(dt(0)("Imagen"), Byte())
            Dim mstream As New System.IO.MemoryStream(arrimage)
            PictureBox1.Image = Image.FromStream(mstream)

            Form2.Show()
            _selectedImage = PictureBox1.Image
            Me.Close()
        Else
            MsgBox("Datos Erroneos")
        End If
    End Sub

    Private Sub BtnRegistrarse_Click(sender As Object, e As EventArgs) Handles BtnRegistrarse.Click


        Me.TBLoginPicBindingSource.AddNew()
        Me.TBLoginPicBindingSource.EndEdit()
        Me.TBLoginPicTableAdapter.Update(Me.DBLoginPicDataSet)


        Try
            saveimage()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Exit Sub
        End Try
        MsgBox("Image has been saved in the database")

    End Sub

    Private Sub BtnExaminar_Click(sender As Object, e As EventArgs) Handles BtnExaminar.Click
        FillPictureBoxFromFile()
    End Sub

    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'DBLoginPicDataSet.TBLoginPic' table. You can move, or remove it, as needed.
        Me.TBLoginPicTableAdapter.Fill(Me.DBLoginPicDataSet.TBLoginPic)



    End Sub

    Private Sub TBLoginPicBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
        Me.Validate()
        Me.TBLoginPicBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DBLoginPicDataSet)

    End Sub
End Class

Formulaire 2 Code:

Module imagen
    Public _selectedImage As Image
    Public ReadOnly Property SelectedImage As Image
        Get
            Return _selectedImage
        End Get
    End Property
End Module

Public Class Form2



    Private Sub TBLoginPicBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
        Me.Validate()
        Me.TBLoginPicBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DBLoginPicDataSet)

    End Sub

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'DBLoginPicDataSet.TBLoginPic' table. You can move, or remove it, as needed.
        Me.TBLoginPicTableAdapter.Fill(Me.DBLoginPicDataSet.TBLoginPic)
        _selectedImage = PBPerfil.Image

    End Sub

    Public Sub PBPerfil_Click(sender As Object, e As EventArgs) Handles PBPerfil.Click

    End Sub
End Class

et obtenez cette erreur

Système.InvalidCastException: "Impossible de convertir l'objet de type 'System.DBNull "pour le" type de Système.Byte[]'.'

C'est comment la forme 1 ressemble

C'est comment la forme 2 ressemble

C'est ainsi que ma base de données ressemble (ne vous inquiétez pas, il n'y a aucune info personnelle ici))

C'est là que j'ai essayer de l'envoyer à partir de la forme de 1 à 2

C'est de cette façon que je suis en train de le recevoir sur le formulaire 2

des conseils sur ce que je pouvais faire de mieux?

database forms image picturebox
2021-11-24 05:29:42
1

La meilleure réponse

0

Vous devez vérifier pour les valeurs null. Si il n'y a pas de données dans la colonne image, il sera d'erreur lorsque vous essayez de les manipuler. Je voudrais suggérer que vous avez sélectionné une image par défaut à afficher si aucun n'est présent dans la base de données.

    If dt(0)("Usuario") IsNot Nothing OrElse Not IsDBNull(dt(0)("Usuario")) Then
        TBusuario.Text = dt(0)("Usuario").ToString
        Dim arrimage = DirectCast(dt(0)("Imagen"), Byte())
        Dim mstream As New System.IO.MemoryStream(arrimage)
        PictureBox1.Image = Image.FromStream(mstream)
    Else
        PictureBox1.Image = Image.FromFile("DefaultImage.png")
    End If
2021-11-24 08:18:30

comment puis-je ajouter une image comme ça? dois-je mettre un chemin semblable à une chaîne de connexion comme ceci: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\geral\source\repos\Login Fase 3 Final\Login Fase 3 Final\bin\Release\DBLoginPic.mdb. ou dois-je simplement mettre un chemin de fichier là-bas? ou il y a un autre moyen?
THEwed123wet

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................