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

C# Discussion :

Comment afficher une photo de access


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Comment afficher une photo de access
    Bonjour

    J ai une base access et une table individu avec une colonne contenenant des photos, je n arrive pas a afficher celles ci dans un compo image

    commenrtfaire

    merci

    voici mon 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
              // -- Recuperation de la photo --
                //Requête à exécuter (ici, nous récupérons le mot de passe des mesures de la courbe)
                string sRequete = "SELECT idCompte, photo FROM COMPTE WHERE idCompte=" + Convert.ToInt32(r["idCompte"].ToString());
     
                // Connexion à la base de test
                OleDbConnection cnxTestAccessImage = new OleDbConnection(MaClass.doConnectionString.ToString());
                cnxTestAccessImage.Open();
     
                // Lecture de l'image 
                OleDbCommand cmdTestAccessImage = new OleDbCommand(string.Concat(sRequete), cnxTestAccessImage);
                OleDbDataReader drTestAccessImage = cmdTestAccessImage.ExecuteReader(CommandBehavior.CloseConnection);
                if (drTestAccessImage.Read())
                {
                    //MessageBox.Show( drTestAccessImage["idCompte"].ToString());
     
                    // Charge en memoire l'image
     
                    MemoryStream mstImage = new MemoryStream((Byte[])(drTestAccessImage["Photo"]));
     
                    // Affiche l'image
                    pPhoto.Image = Image.FromStream(mstImage);
                }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    En fait ca me donne ca comme erreur
    et la je ne comprends rien

    merci de m aider

    'exception System.InvalidCastException n'a pas été gérée
    Message=Impossible d'effectuer un cast d'un objet de type 'System.DBNull' en type 'System.Byte[]'.
    Source=GIEP
    StackTrace:
    à GIEP.F_GestionUser.dgwListe_CellClick(Object sender, DataGridViewCellEventArgs e) dans C:\Developpement\Projets_Net\GIEP\Gestion des inscriptions des élèves et du personnel\F_GestionUser.cs:ligne 70
    à System.Windows.Forms.DataGridView.OnCellClick(DataGridViewCellEventArgs e)
    à System.Windows.Forms.DataGridView.OnMouseClick(MouseEventArgs e)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.DataGridView.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.RunDialog(Form form)
    à System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
    à System.Windows.Forms.Form.ShowDialog()
    à GIEP.F_Protection.button3_Click(Object sender, EventArgs e) dans C:\Developpement\Projets_Net\GIEP\Gestion des inscriptions des élèves et du personnel\F_Protection.cs:ligne 38
    à System.Windows.Forms.Control.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ButtonBase.WndProc(Message& m)
    à System.Windows.Forms.Button.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.RunDialog(Form form)
    à System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
    à System.Windows.Forms.Form.ShowDialog()
    à GIEP.F_Main.button5_Click(Object sender, EventArgs e) dans C:\Developpement\Projets_Net\GIEP\Gestion des inscriptions des élèves et du personnel\F_Main.cs:ligne 49
    à System.Windows.Forms.Control.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ButtonBase.WndProc(Message& m)
    à System.Windows.Forms.Button.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.Run(Form mainForm)
    à GIEP.Program.Main() dans C:\Developpement\Projets_Net\GIEP\Gestion des inscriptions des élèves et du personnel\Program.cs:ligne 19
    à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    à System.Threading.ThreadHelper.ThreadStart()
    InnerException:

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    En changeant la requete sql j ai plus la 1ere erreur mais une autre a la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pPhoto.Image = Image.FromStream(mstImage);

    L'exception System.ArgumentException n'a pas été gérée
    Message=Le paramètre n'est pas valide.
    Source=System.Drawing
    StackTrace:
    à System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
    à System.Drawing.Image.FromStream(Stream stream)
    à GIEP.F_GestionUser.dgwListe_CellClick(Object sender, DataGridViewCellEventArgs e) dans C:\Developpement\Projets_Net\GIEP\Gestion des inscriptions des élèves et du personnel\F_GestionUser.cs:ligne 79
    à System.Windows.Forms.DataGridView.OnCellClick(DataGridViewCellEventArgs e)
    à System.Windows.Forms.DataGridView.OnMouseClick(MouseEventArgs e)

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    c'est pourtant explicite
    Impossible d'effectuer un cast d'un objet de type 'System.DBNull' en type 'System.Byte[]'.
    tu as une valeur nulle dans la base, et tu essaye de caster null en tableau de byte
    avant le cast il faut donc tester si ce n'est pas null

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Pour le null j ai résolu en chageant la requete SQL, mais c est a l affectation dans le picturebox que ca coince encore

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    le code m'a l'air bon, par contre les octets dans ta base ne représente peut etre pas un format d'image
    quel est le code d'insert de cette image ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Pour mes tests, j ai rajouté une image a la main dans la base access et j ai fait ce code pour les rajouter par mon interface


    Y aurait il une methode plus simple ??

    merci

    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
                  // Tableau d'octets representant l'image au format jpeg
                    MemoryStream mstImage = new MemoryStream();
                    pPhoto.Image.Save(mstImage, System.Drawing.Imaging.ImageFormat.Jpeg);
                    Byte[] bytImage = mstImage.GetBuffer();
                    mstImage.Dispose();
     
                    // Connexion à la base de test
                    OleDbConnection cnxTestAccessImage = new OleDbConnection(MaClass.doConnectionString.ToString());
                    cnxTestAccessImage.Open();
     
                    // Insere l'image dans la base
                    OleDbCommand cmdTestAccessImage = new OleDbCommand("UPDATE Compte set [Photo]=(?) where idCompte=" + MaClass.doIdUser.ToString(), cnxTestAccessImage);
                    cmdTestAccessImage.Parameters.Add(new OleDbParameter("Photo", OleDbType.VarBinary, bytImage.Length,
                    ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytImage));
                    cmdTestAccessImage.ExecuteNonQuery();
                    cnxTestAccessImage.Close();

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    essaye de faire un insert par code puis de ressortir l'image par code

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    J ai essayé mais pareil

    dans la base access, dans la colonne photo, il y a bien quelque chose : c est ecrit : Donnée Binaire, mais refuse de l ouvrir
    Dans la base acces, la colonne Photo est en Objet OLE


    Moi en fait ca fait tres longtemps que je n ai plus fait de cSharp, la c est pour ma petite nièce qui est en 2eme année de BTS et qui doit faire un projet pour son exam

    Je suis dépassé

    Aurais tu un exemple qui marche à me passer ?

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    ton code est le même que celui que j'ai, sauf que moi je suis sur sql server et avec un champ de type binaire
    donc le problème vient peut etre du type de ton champs

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    J ai trouvé, mais je ne comprends pas pourquoi

    j ai remplacé ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pPhoto.Image.Save(mstImage, System.Drawing.Imaging.ImageFormat.Jpeg);
    par ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pPhoto.Image.Save(mstImage, System.Drawing.Imaging.ImageFormat.png);
    Mais je ne comprends pas pourquoi avec jpg, ca marchait pas

    merci a toi

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 349
    Points : 441
    Points
    441
    Par défaut
    Salut,

    D’après ce que j'ai compris tu as directement integrer les images dans la base de donnée ?

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

Discussions similaires

  1. [AC-2003] Comment Afficher une photo en plusieurs
    Par kabidian dans le forum IHM
    Réponses: 11
    Dernier message: 31/08/2013, 21h48
  2. Comment Afficher une photo dans un rave
    Par GuyzoS dans le forum Débuter
    Réponses: 2
    Dernier message: 27/01/2010, 15h49
  3. comment afficher une photo dans un état ?
    Par dj_techno dans le forum IHM
    Réponses: 7
    Dernier message: 13/11/2007, 09h13
  4. Comment afficher une photo et une signature
    Par angiosfr dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 23/11/2005, 21h42
  5. comment afficher une boite de dialogue simple ?
    Par Ekimasu dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/06/2004, 16h46

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