IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Stocker Image dans Oracle via VB.net


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Stocker Image dans Oracle via VB.net
    Bonjour,

    S'il vous plaît, j'aimerai stocker une image dans oracle via le code vb.net. Au fait, j'ai effectué des recherches avant de poster ce message, mais j'ai trouvé plein des exemples pour le code java (et j'ai réussi à stocker l'image en java).

    S'il vous plaît, aidez moi ...

    Merci.

    Sisiniya.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben c'est le même principe...

    Tu fais une requête INSERT dans un champ BLOB, avec un paramètre pour transmettre les données de l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
     
    command.CommandText = "INSERT INTO LA_TABLE(LA_COLONNE) VALUES (:image_bytes)"
    command.Parameters.Add("image_bytes", OracleType.Blob).Value = image_bytes
    command.ExecuteNonQuery()
    Pour convertir l'image en bytes, tu peux utiliser un MemoryStream :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim image_bytes as Byte()
    Using ms As New MemoryStream()
        image.Save(ms)
        image_bytes = ms.ToArray()
    End Using

  3. #3
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Merci pour votre réponse.

    J'ai des questions si vous me permettez bien sûr à propos de votre code :

    Premièrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    command.CommandText = "INSERT INTO LA_TABLE(LA_COLONNE) VALUES (:image_bytes)"
    command.Parameters.Add("image_bytes", OracleType.Blob).Value = image_bytes
    Est ce qu image_bytes est la variabe que vous avez déclaré -> Dim image_bytes as Byte() ?

    Où puis-je préciser le chemin de l'image dans ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim image_bytes as Byte()
    Using ms As New MemoryStream()
        image.Save(ms)
        image_bytes = ms.ToArray()
    End Using
    Deuxièment :
    Il y a deux erreurs qui ont été sourligné par IDE Visual Studio :

    1) image.Save(ms) -->> il ne connaît pas save
    2) OracleType.Blob -->> il ne connait pas OracleType, il sait que OracleTypeException (d'ailleur j'ai importé Imports Oracle.DataAccess.Types)


    Merci infiniment pour vos aides.


    Sisiniya.

  4. #4
    Membre confirmé Avatar de zarohn
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 148
    Par défaut
    Pour OracleType il faut importer System.Data.OracleClient je crois

  5. #5
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    moi je travaille avec Imports Oracle.DataAccess.Client

  6. #6
    Membre confirmé Avatar de zarohn
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 148
    Par défaut
    essayes OracleDbType.Blob à la place de OracleType.Blob

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    Est ce qu image_bytes est la variabe que vous avez déclaré -> Dim image_bytes as Byte() ?
    oui

    Citation Envoyé par sisiniya Voir le message
    Où puis-je préciser le chemin de l'image dans ce code ?
    Mon code suppose que image est une variable de type Image. On peut charger l'image avec Image.FromFile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim image As Image = Image.FromFile(cheminDuFichier)
    (D'ailleurs il vaudrait sans doute mieux l'appeler autrement, "img" par exemple : vu que VB ne prend pas en compte la différence de casse, il risque de confondre avec le type Image)

    Citation Envoyé par sisiniya Voir le message
    1) image.Save(ms) -->> il ne connaît pas save
    Sans doute parce que la variable image n'est pas déclarée (cf. ci-dessus)

    Citation Envoyé par sisiniya Voir le message
    2) OracleType.Blob -->> il ne connait pas OracleType, il sait que OracleTypeException (d'ailleur j'ai importé Imports Oracle.DataAccess.Types)
    OK, j'ai supposé que tu utilisais le provider Oracle du framework (System.Data.OracleClient), mais en fait tu utilises ODP.NET... Si tu remplaces OracleType par OracleDbType, ça devrait marcher

  8. #8
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Merci pour vos réponses. Oui ça marche, et quand je consulte dans la base donnée le champs de l'image, je trouve <Binary data>.

    Alors, ma question suivante si vous me permettez, je veux charger l'image qui je viens de stocker pour s'assurer que le stockage est bien fait.


    Merci infiniment pour vos aides.


    Sisiniya.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben tu fais un SELECT du champ où y a l'image, tu récupères un Byte()
    Et à partir de là, tu charges l'image via un MemoryStream :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    command.CommandText = "SELECT LA_COLONNE FROM LA_TABLE WHERE (condition...)"
    Dim image_bytes as Byte() = CType(command.ExecuteScalar(), Byte())
    Dim img As Image
    Using ms As New MemoryStream(image_bytes)
        img = Image.FromStream(ms)
    End Using

  10. #10
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Merci pour votre réponse, j'ai essayé d'executer le code. mais je veux voir la photo , par exemple soit la stocker dans un endrit sur disque ou bien l'afficher dans un PictureBox.

    Alors pour la stocker dans le disque je sais pas comment, et pour l'afficher sur un PictureBox que j'ai déplacé dans le form, alors je fais comme ça :

    PictureBox1.Visible()
    PictureBox1.Image(img)


    Mais il me souligne les deux lignes !!


    Merci infiniment pour vos aides...


    Sisiniya

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    Alors pour la stocker dans le disque je sais pas comment
    Utilise la méthode Save de l'image, en passant en paramètre le chemin du fichier


    Citation Envoyé par sisiniya Voir le message
    et pour l'afficher sur un PictureBox que j'ai déplacé dans le form, alors je fais comme ça :

    PictureBox1.Visible()
    PictureBox1.Image(img)


    Mais il me souligne les deux lignes !!
    Visible et Image sont des propriétés, pas des méthodes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PictureBox1.Visible = True
    PictureBox1.Image = img

  12. #12
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    si vous me permettez, et vraiment je m'excuse pour la quantité des questions que je pose.

    Voilà mon code que j'ai inséré dans un bouton.Au clique sur ce bouton, je veux que je crée dans disque dure l'image, et aussi d'afficher cette image dans un Picturebox que j'ai glissé dans le form.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Dim oradb As String = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = Sisiniya-PC)(PORT = 1521))" _
                                + "(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = XE)));" _
                                + "User Id=SYSTEM;Password=sisiniya;"
    
            ' Create the connection object
            Dim conn As New OracleConnection(oradb)
            Dim cmd As New OracleCommand
            Try
                conn.Open()
                Try
                    cmd.Connection = conn
                    cmd.CommandText = "select image from AAA where id = 6"
                    Dim image_bytes As Byte() = CType(cmd.ExecuteScalar(), Byte())
                    Dim img As Image
                    Using ms As New MemoryStream(image_bytes)
                        img = Image.FromStream(ms)
                        img.Save("C:\image_chargee.png")                End Using
                    PictureBox1.Visible = True
                    PictureBox1.Image = img                cmd.ExecuteReader()
                Catch ex As Exception
                    Console.WriteLine(ex.Message)
                End Try
            Catch ex As Exception
                Console.WriteLine("Sisiniya : Connection to Oracle database established failed !")
            Finally
                
                cmd.Dispose() 'Dispose OracleCommand object
                ' Close and Dispose OracleConnection object
                conn.Close()
                conn.Dispose()
            End Try
    
        End Sub
    End Class
    Mais à l'xecution, ni l'image a été crée dans le chemin c:\ ni l'image a été afficher dans le PictureBox1.


    Je m'excuse ... et merci toujours pour vos aides.


    Sisiniya.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    et dans la console, y a des exceptions qui s'affichent ?

    sinon, 2 remarques :

    - il manquerait pas des retours à la ligne dans ton code ?
    - c'est quoi ce "cmd.ExecuteReader" qui traine tout seul et qui sert à rien ?

  14. #14
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Non Non, il n' y a aucune exception.

    Citation Envoyé par tomlev Voir le message
    il manquerait pas des retours à la ligne dans ton code ?
    C'est vrai qu'il n' y a pas de retoure à la ligne pour certain ligne de code, mais ce-ci est dû juste de l'affichage de mon message. Mais chez moi, c'est bien sûr avec des sauts de ligne.

    Citation Envoyé par tomlev Voir le message
    - c'est quoi ce "cmd.ExecuteReader" qui traine tout seul et qui sert à rien ?
    Oui c'est vrai ça sert à rien, celui là je l'ai mis en commentaire chez moi, je travaille avec cmd.ExecuteScalar()


    Alors, je ne sais pas où est le problème. Est ce que je dois réctifier le code, ou bien ajouter quelques choses ... ??



    Merci pour vos aides ...

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    Non Non, il n' y a aucune exception.
    Ben oui mais tu les affiches dans la console, et vu que c'est une appli windows, y a pas de console... mets plutôt des MessageBox à la place des Console.WriteLine

    Citation Envoyé par sisiniya Voir le message
    Alors, je ne sais pas où est le problème. Est ce que je dois réctifier le code, ou bien ajouter quelques choses ... ??
    Ben je sais pas, j'ai pas assez d'éléments pour l'instant... essaie d'exécuter en pas-à-pas pour voir ce qui se passe

  16. #16
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Oui vous avez raison, je dois faire un MsgBox. Alors il m'a affiché le message suivant :

    Le paramétre n'est pas valide

    ça veut dire quoi ?

    Merci pour vos réponses.

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    je sais pas... il faudrait voir sur quelle instruction il plante. Poste aussi la pile d'appels de l'exception (StackTrace)

  18. #18
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Après le StackTrace, il m'a indiqué la ligne là où il y a l'erreur , c'est la ligne en rouge:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    cmd.Connection = conn
                    cmd.CommandText = "select image from AAA where id = 14"
                    Dim image_bytes As Byte() = CType(cmd.ExecuteScalar(), Byte())
                    Dim img As Image
                    Using ms As New MemoryStream(image_bytes)
                        img = Image.FromStream(ms)                   
                     img.Save("C:\image_chargee.png")
                    End Using
                    PictureBox1.Visible = True
                    PictureBox1.Image = img
                    'cmd.ExecuteReader()
                Catch ex As Exception
                    MsgBox(ex.Message + "-> Stacke : " + ex.StackTrace, MsgBoxStyle.Information)
                End Try

    Merci pour votre aide.

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    bizarre... il y a bien des données dans image_bytes ? tu peux vérifier quelle taille il fait ?

  20. #20
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    SUITE DE DISCUSSION :

    Bonjour ... ,

    Un mois passé, et je n'arrive pas à charger l'image depuis la base de donnée.

    Voilà comment et j'ai procédé pour enregistrer et charger dans la base :

    Fonction pour convertir Image to Byte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Function ImageToByteArray(ByVal img As Image) As Byte()
            Dim stream As New MemoryStream
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Return stream.ToArray
        End Function
    Enregistre l'image dans BDD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    Dim image_bytes As Byte()
            Dim img As Image = Image.FromFile("c:\me.png")
            image_bytes = ImageToByteArray(img)
     
            ' Create the connection object
            Dim conn As New OracleConnection(oradb)
            Dim cmd As New OracleCommand
            Try
                conn.Open()
                Try
                    cmd.Connection = conn
                    'cmd.CommandText = "INSERT INTO AAA(id,image,name) VALUES (seq_no_aaa.nextval,:image_bytes,'" + n + "')"
                    cmd.CommandText = "insert into personnels (id_personnel,photo_personnel) values(seq_personnel.nextval:image_bytes)"
                    cmd.Parameters.Add("image_bytes", OracleDbType.Blob).Value = image_bytes
                    cmd.ExecuteNonQuery()
                    'cmd.ExecuteReader()
                Catch ex As Exception
                    MsgBox("Erreur Requete : " + ex.Message + "__//__" + ex.StackTrace)
                End Try
            Catch ex As Exception
                MsgBox("Erreur Connexion : " + ex.StackTrace)
            Finally
     
                cmd.Dispose()
                conn.Close()
                conn.Dispose()
            End Try
    Resultat : aucune erreur n'est générée

    Chargement d'image from la base de donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    ' Create the connection object
            Dim conn As New OracleConnection(oradb)
            Dim cmd As New OracleCommand
            Dim dr As OracleDataReader
            Try
                conn.Open()
                Try
                    cmd.Connection = conn
                    cmd.CommandText = "select photo_personnel from personnels where id_personnel = 123"
                    dr = cmd.ExecuteScalar()
                    Dim image_bytes As Byte() = CType(dr("photo_personnel"), Byte())
    
                    Dim img As Image
                    
                    Using ms As New MemoryStream(image_bytes)
                        img = Image.FromStream(ms)
                        img.Save("c:\image_chargee.png")
                    End Using
    
                    image_.Visible = True
                    image_.Image = img
    
                Catch ex As Exception
                    MsgBox(ex.Message + "-> Stacke : " + ex.StackTrace, MsgBoxStyle.Information)
                End Try
            Catch ex As Exception
                MsgBox("Sisiniya : Connection to Oracle database established failed !", MsgBoxStyle.Information)
            Finally
    Resultat : Erreur dans la ligne Rouge ->
    MESSAGE D'ERREUR ENVOYE PAR STACKTRACE :
    La référence d'objet n'est pas définie à une instance d'un objet

    J'ai besoin de vos aides, car j'ai passé un mois en cherchant où la solution mais vainement.

    Merci ...

    Sisiniya.

Discussions similaires

  1. ASP.NET C# Fonctions Stockée dans Oracle via ODBC avec paramètres
    Par Mallory.Goossens dans le forum ASP.NET
    Réponses: 9
    Dernier message: 05/07/2011, 10h53
  2. [Oracle] stocker une image dans oracle type BLOB
    Par dimainfo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/03/2011, 17h06
  3. Modifier une image dans access via VB.NET
    Par bestcasaoui dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/03/2011, 21h23
  4. Inserer une image dans Oracle Via Java
    Par y.medium dans le forum JDBC
    Réponses: 1
    Dernier message: 05/05/2010, 10h37
  5. Stocker les images dans oracle
    Par Bourak dans le forum Oracle
    Réponses: 3
    Dernier message: 27/09/2006, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo