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

ASP.NET Discussion :

Ranger une image Byte à partir d'un reader possible? [Débutant]


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    Bonjour à tous,

    Je voudrais savoir s'il est possible de stocker une image, qui se trouve à l'origine dans une base de données Postgresql sous la forme d'un byte, dans une variable à partir d'un NpgsqlDataReader ?
    En gros le code ressemblerait à ça (bien sur ça ne marche pas):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    using (NpgsqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                MyDataList.Add(new MyData
                                {
                                    Id = reader.GetInt32(0),
                                    image = reader.GetByte(7), // C'est ici ou je veux ranger mon image
                                    defaultCode = reader.GetString(9),
                                    nameTemplate = reader.GetString(10)
                                });
                            }
                        }
    J'ai trouvé des tutoriel sur le net ou beaucoup de monde utilise des Byte[] mais à chaque fois ce sont des fonctions qu'il faut appelé indépendamment alors que moi je dois générer toutes les données en même temps. L'affichage se fera dans un programme tiers (Intuiface).

    Je vous remercie pour l'aide apportée,
    Alexandre.



    [EDIT 1]
    Bonjour à tous,

    J'ai tapé ce code mais je reçois une exception de type 'System.ArgumentException' avec en supplément "Informations supplémentaires : Le paramètre n'est pas valide." Voici le code :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
            public void run(string productName)
            {
                using (NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=openpg;Password=openpgpwd;Database=test;"))
                {
                    try
                    {
                        conn.Open();
     
                        using (NpgsqlCommand command = new NpgsqlCommand("Select pr.id, pr.default_code, pr.name_template, tpl.list_price, pr.image_medium FROM product_product as pr inner join product_template as tpl on tpl.id = pr.product_tmpl_id WHERE pr.default_code = :productName;", conn))
                        {
                            command.Parameters.AddWithValue(":productName", productName);
                            //command.Parameters.Add(new NpgsqlParameter("productName", NpgsqlDbType.Text));
                            //command.Parameters[0].Value = productName;
                            try
                            {
                                using (NpgsqlDataReader reader = command.ExecuteReader())
                                {
                                    try
                                    {
                                        while (reader.Read())
                                        {
                                            if (reader[4] != null)
                                            {
                                                using (Stream productImageStream = new System.IO.MemoryStream((Byte[])reader[4]))
                                                {
                                                    try
                                                    {
                                                        MyDataList.Add(new MyData
                                                        {
                                                            Id = reader[0].ToString(),
                                                            defaultCode = reader[1].ToString(),
                                                            nameTemplate = reader[2].ToString(),
                                                            listPrice = reader[3].ToString(),
                                                            image = Image.FromStream(productImageStream)
                                                        });
                                                        Console.WriteLine(reader[0]);
                                                        Console.WriteLine(reader[1]);
                                                        Console.WriteLine(reader[2]);
                                                        Console.WriteLine(reader[3]);
                                                    }
                                                    catch
                                                    {
                                                        throw;
                                                    }
                                                }
                                            }
                                            else
                                                MyDataList.Add(new MyData
                                                {
                                                    Id = reader[0].ToString(),
                                                    defaultCode = reader[1].ToString(),
                                                    nameTemplate = reader[2].ToString(),
                                                    listPrice = reader[3].ToString(),
                                                    image = null
                                                });
                                        }
                                    }
                                    catch
                                    {
                                        throw;
                                    }
                                    conn.Close();
                                }
                            }
                            catch
                            {
                                throw;
                            }
                        }
                    }
                    catch
                    {
                        throw;
                    }
     
                }                    
                MyData data = new MyData();
                Console.Write("{0} \t", MyDataList.Count);
     
                for (int i = 0; i < MyDataList.Count; i++)
                {
                    data = MyDataList[i];
                    Console.Write("{0} \t", data.ToString());
                }
                Console.ReadKey(true);
     
            }
    La requête SQL fonctionne, je l'ai essayé dans pgAdmin et cela me retourne bien les données que je recherche. Mon problème concerne toujours la récupération de l'image et la je commence vraiment à bien coincer.
    Les variables id, nameTemplate, etc sont dans une classe à part, MyDataList est un ObservableCollection.

    Si vous avez besoin d'autres information n'hésitez pas à le dire je vous les fournirai.

    Merci par avance pour l'aide apportée,
    Alexandre.



    [EDIT 2]
    Bonjour,

    J'ai modifié un peu mon code pour ne traiter que l'image :

    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
     
    using (NpgsqlCommand command = new NpgsqlCommand("SELECT image_medium FROM product_product WHERE default_code = :productName;", conn))
                        {
                            command.Parameters.AddWithValue(":productName", productName);
                            try
                            {
                                Byte[] productImageByte = (Byte[])command.ExecuteScalar();
                                if (productImageByte != null)
                                {
                                    using (MemoryStream productImageStream = new MemoryStream(productImageByte))
                                    {
                                        Console.WriteLine(productImageStream.ToString());
                                        Console.WriteLine("Voici ce que  contient reader[0] : " + productImageStream);
     
                                        try
                                        {
                                            MyDataList.Add(new MyData
                                            {
                                                image = Image.FromStream(productImageStream)
                                            });
                                        }
    Il semblerait que le paramètre non valide soit 'productImageStream', d'après le site de microsoft Image.FromStream prends en paramètre une image. Pourtant sur plusieurs site c'est bien de cette façon la que l'on récupère une image... Est ce que ça aurait changé entre temps? Comment puis-je transformer mon productImageByte en une image?

    Je vous remercie par avance pour votre aide,
    Alexandre.

  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
    Quel est le type de la colonne image_medium dans la DB ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    Bonjour et merci d'avoir répondu,

    Le type d'image_medium est bytea.

  4. #4
    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
    Peux-tu donner les détails de l'erreur ? Message, InnerException et StackTrace

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    La fenêtre d'erreur me donne ca :

    Une exception non gérée du type 'System.ArgumentException' s'est produite dans consoleTest2.exe
    Informations supplémentaires : Le paramètre n'est pas valide.

    Et le paramètre non valide est le 'productImageStream' de "image = Image.FromStream(productImageStream)" car si je remplace cette ligne par un Console.Writeline par exemple je ne génère plus d'erreur.

  6. #6
    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 yazmat Voir le message
    Une exception non gérée du type 'System.ArgumentException' s'est produite dans consoleTest2.exe
    Informations supplémentaires : Le paramètre n'est pas valide.
    Ca tu l'avais déjà dit... ce que je te demande c'est le reste des détails de l'exception, notamment la StackTrace (s'il y en a une) et la InnerException avec tous ses détails

    D'autre part, comment l'image a-t-elle été enregistrée dans la DB à l'origine ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de création d'une image BMP à partir d'un byte[]
    Par Dark_Alex69 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 28/03/2010, 16h32
  2. reconstitution d'une image a partir d'un tableau de bytes
    Par guian dans le forum Entrée/Sortie
    Réponses: 17
    Dernier message: 04/12/2008, 16h54
  3. Réponses: 1
    Dernier message: 03/11/2008, 15h36
  4. Alimenter une image byte[] à partir d'un String
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 18
    Dernier message: 31/10/2006, 07h54
  5. [Image] Comment créer une image à partir d'un fichier
    Par mereyj dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/07/2005, 21h48

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