Probleme stockage image postgresql

Signaler
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008
-
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008
-
Bonjour à tous,


Je suis en train de realisé une application en C# (ecrit sour visual
studio 2005) et je communique avec une base postgres via l'ODBC.

Je souhaiterai stocké une image dans ma table, j'ai donc créé un champ de type bytea.

Du coté de mon logiciel je transforme mon image en tableau de byte.


Le problème est que quand j'essaye de faire le transfert j'ai l'erreur suivante : type "lo" does not exist


Quelqu'un peu t'il m'aider ?


Merci par avance.

duck88

6 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
aurais-tu un bout de code à nous montrer ?

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

BIENSUR !!!

Conversion de l'image en byte

            MemoryStream ms = new MemoryStream();
            Image mon_image;
            mon_image = this.pictureBox1.Image;
            byte[] tableau;
            mon_image.Save(ms, mon_image.RawFormat);
            tableau = (byte[])(ms.ToArray());

Pour la generation des requetes j'ai utilisé l'assistant voici le code qu'il me donne :

this.odbcCommand1.CommandText = "INSERT INTO "public".images  (id_image, image) VALUES (?,?)";
            this.odbcCommand1.Connection = this.odbcConnection1;
            this.odbcCommand1.Parameters.AddRange(new System.Data.Odbc.OdbcParameter[] {
            new System.Data.Odbc.OdbcParameter("id_image", System.Data.Odbc.OdbcType.Int, 0, "id_image"),
            new System.Data.Odbc.OdbcParameter("Param2", System.Data.Odbc.OdbcType.VarChar, 1024)});

J'insère ma data dans mon le dataset generé par l'adapter et fait un uptdate de celui ci :

DataRow row = dataSet11.Tables[0].NewRow();
            row[0] = 1;
            row[1] = tableau ;

            dataSet11.Tables[0].Rows.Add(row);
            odbcDataAdapter1.Update(dataSet11);

Merci de ton aide

duck88
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
je pense que le problème vient du fait que tu utilises un champ VarChar pour stocker ton image. Utilise plutot un champ binaire... (blob)

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

J'ai changé le type du champ en varbinary et pourtant j'ai toujours le probleme du 'lo' (large object)

duck88
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
hum... quelle taille fait ton image ?

je vois que tu ne réserves que 1024 pour la place... donc à priori... 1ko ? non !?!

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

L'image etait bien superieur au 1024 donc j'ai changé la taille du buffer, mais rien n'y fait.
Une precision importante est que c'est une erreur lors de l'update et c'est l'odbc qui renvoi une erreur de postgres.

duck88