none
Enregistrement d'image dans une base de données Access RRS feed

  • Question

  • Bonsoir,je souhaite enregistrer et recuperer des images dans une base de données Access via C# mais mon code se plante ,pas d'erreur dans compilation l'application cesse de fonctionner:

                        

    try

    {

     OleDbConnection Connect = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Contacts.accdb;Persist Security Info=False;User ID=Admin");

    Connect.Open(); string query = "INSERT INTO Amis(Nom,Prenom,Age,Photo) VALUES(@nom,@pren,@age,@image)"; OleDbCommand cmd = new OleDbCommand(query, Connect);

      byte[] ImgSave = null;
                     FileStream FichierLire = new FileStream(ImgLocation, FileMode.Open, FileAccess.Read);
                     BinaryReader LireFichierBinaire = new BinaryReader(FichierLire);
                     ImgSave = LireFichierBinaire.ReadBytes((int)FichierLire.Length);

    cmd.Parameters.AddWithValue("@nom", txtNom.Text); cmd.Parameters.AddWithValue("@pren", txtPrenom.Text); cmd.Parameters.AddWithValue("@age", int.Parse(txtAge.Text)); cmd.Parameters.AddWithValue("@image", ImgSave); cmd.ExecuteNonQuery(); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (Connect.State == ConnectionState.Open) { Connect.Close(); ChargerData(); } }

    Une solution pour moi svp!

    Photo est de type piece jointe sous Access

    forum ms89




    mercredi 20 novembre 2013 21:10

Réponses

  • Et bien, au moment de sauvegarder votre ligne dans la base de données, vous sauvegarder le fichier dans un répertoire par exemple. Et quand vous lisez cette ligne, vous récupérez l'emplacement et vous lisez le fichier.

    Sauvegarde :

    public void Save(string Name, string LastName, Bitmap img)
    {
           // sauvegarde du fichier image.
           var fileName = Path.Combine("c:\\monFolderImages", Name + ".JPG");
           img.Save(fileName);

          // Sauvegarde dans la base
          // votre code sauf pour la colonne Image qui devient ImageFileName
          cmd.Parameters.AddWithValue("@imageFileName", fileName);}

    Lecture :

    public Bitmap LoadImage(int idPerson)
    {
          // chargement de la ligne donc lecture de la colonne ImageFileName.
         return new Bitmap(imageFileName);
    }


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse Claver amon jeudi 21 novembre 2013 18:09
    jeudi 21 novembre 2013 13:40

Toutes les réponses

  • Je sais que je ne réponds pas à votre question mais sauvegarder les images dans la base est une mauvaise idée.

    Il est préférable d'utiliser une zone de stockage (CDN, chemin réseau, etc.) et de stocker son emplacement dans la base uniquement.

    Ceci dit, votre colonne est bien de type Text ou Ole Object ?


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    jeudi 21 novembre 2013 09:20
  • bonjour,

    j'ai bien compris votre idée mais si vous me donniez un exemple de code pour mieux me guider ou eclaicir me fera boucoup avancer svp!.

    Merci


    forum ms89


    jeudi 21 novembre 2013 11:18
  • Et bien, au moment de sauvegarder votre ligne dans la base de données, vous sauvegarder le fichier dans un répertoire par exemple. Et quand vous lisez cette ligne, vous récupérez l'emplacement et vous lisez le fichier.

    Sauvegarde :

    public void Save(string Name, string LastName, Bitmap img)
    {
           // sauvegarde du fichier image.
           var fileName = Path.Combine("c:\\monFolderImages", Name + ".JPG");
           img.Save(fileName);

          // Sauvegarde dans la base
          // votre code sauf pour la colonne Image qui devient ImageFileName
          cmd.Parameters.AddWithValue("@imageFileName", fileName);}

    Lecture :

    public Bitmap LoadImage(int idPerson)
    {
          // chargement de la ligne donc lecture de la colonne ImageFileName.
         return new Bitmap(imageFileName);
    }


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse Claver amon jeudi 21 novembre 2013 18:09
    jeudi 21 novembre 2013 13:40
  • ok je vais essayer

    forum ms89

    jeudi 21 novembre 2013 16:49
  • merci,ça marche

    forum ms89

    jeudi 21 novembre 2013 18:09