none
visual c# Express 2010 et sqlce RRS feed

  • Question

  • Salut a tous

    Mon probleme est le suivant

    Je suis ariver a enregistrer une images dans une base de données SQLCE

    de cette facon

    static public void SaveToContacts(PictureBox pb)
            { 
                SqlCeConnection cn = new SqlCeConnection(ConnectString());
                if (cn.State == ConnectionState.Closed)
                {
                    cn.Open();
                }
                SqlCeCommand cmd;
                sql = "insert into Contacts "
                    + "(Nom, Prenom, Photo) "
                    + "values (@nom, @prenom, @Photo)";
                cmd = new SqlCeCommand(sql, cn);
                cmd.Parameters.AddWithValue("@nom", Nom);
                cmd.Parameters.AddWithValue("@prenom", Prenom);
                ImageFormat value = default(ImageFormat);
                byte[] imageBytes = null;
                value = ImageFormat.Jpeg;
                MemoryStream ms = new MemoryStream();
                pb.Image.Save(ms, ImageFormat.Jpeg);
                imageBytes = ms.ToArray();
                cmd.Parameters.AddWithValue("@Photo", imageBytes);
                cmd.ExecuteNonQuery();
                cn.Close();
                cn = null;
            }

    mais pour la recuperer je trouve pas

    kkun a une petite idee la desus

    MERCI!


    Daniel


    mercredi 27 juin 2012 01:10

Réponses

  • Bonjour Gilles

    Oui j'ai essayer ca mais non, pas moyen mais j'ai trouver par hazar ce bout de code qui fait la job.

    byte[] data = (byte[])this.dgvContacts.SelectedRows[0].Cells["Photo"].Value;

    MemoryStream ms = new MemoryStream(data);

    Helper.Photo = Image.FromStream(ms);

    Le Helper est une class et photo est declarer dans la class

    Merci


    Daniel

    jeudi 28 juin 2012 10:37
  • Bonjour,

    Préférez dans ce cas la méthode suivante :

    TypeDescriptor.GetConverter(typeof(Image)).ConvertFrom(dgvContacts.SelectedRows[0].Cells["Image"].Value);

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    vendredi 29 juin 2012 07:27
    Modérateur

Toutes les réponses

  • Salut a tous

    Mon probleme est le suivant

    Je suis ariver a enregistrer une images dans une base de données SQLCE

    de cette facon

    static public void SaveToContacts(PictureBox pb)
            { 
                SqlCeConnection cn = new SqlCeConnection(ConnectString());
                if (cn.State == ConnectionState.Closed)
                {
                    cn.Open();
                }
                SqlCeCommand cmd;
                sql = "insert into Contacts "
                    + "(Nom, Prenom, Photo) "
                    + "values (@nom, @prenom, @Photo)";
                cmd = new SqlCeCommand(sql, cn);
                cmd.Parameters.AddWithValue("@nom", Nom);
                cmd.Parameters.AddWithValue("@prenom", Prenom);
                ImageFormat value = default(ImageFormat);
                byte[] imageBytes = null;
                value = ImageFormat.Jpeg;
                MemoryStream ms = new MemoryStream();
                pb.Image.Save(ms, ImageFormat.Jpeg);
                imageBytes = ms.ToArray();
                cmd.Parameters.AddWithValue("@Photo", imageBytes);
                cmd.ExecuteNonQuery();
                cn.Close();
                cn = null;
            }

    mais pour la recuperer je trouve pas

    kkun a une petite idee la desus

    MERCI!


    Daniel

         en faite je la recupere de cette facon

       

     private void LoadData()
            {
                using (SqlCeConnection cn = new SqlCeConnection(M.ConnectString()))
                { 
                     cn.Open(); 
                        SqlCeDataAdapter dta;
                        DataSet dts;
                        dts = new DataSet();
                        String sql = "Select * From Contacts order by Nom ASC";
                        dta = new SqlCeDataAdapter(sql, cn);
                        dta.Fill(dts, "Contacts");
                        dgvContacts.DataSource = dts.Tables["Contacts"];
                       
                        cn.Close();
                }
            }

    mais je trouve pas comment placer la photo de la ligne selectionner dans la pictureBox de mon programme

    j'y arrive pour les donnée text mais pour les donnée images     La????????????.

    je m'explique la dessus

    lblID.Text = dgvContacts.SelectedRows[0].Cells["ID"].Value.ToString();
     t1.Text =  dgvContacts.SelectedRows[0].Cells["Nom"].Value.ToString();
     t2.Text = dgvContacts.SelectedRows[0].Cells["Prenom"].Value.ToString();
    picturebox2.Text= "???????????????????????????????????????????????????????????????";

    Voila je fait comment pour la photo

    Merci


    Daniel


    mercredi 27 juin 2012 01:29
  • Bonjour,

    Avez-vous essayé :

    picturebox.Image = dgvContacts.SelectedRows[0].Cells["Image"].Value;

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 28 juin 2012 06:50
    Modérateur
  • Bonjour Gilles

    Oui j'ai essayer ca mais non, pas moyen mais j'ai trouver par hazar ce bout de code qui fait la job.

    byte[] data = (byte[])this.dgvContacts.SelectedRows[0].Cells["Photo"].Value;

    MemoryStream ms = new MemoryStream(data);

    Helper.Photo = Image.FromStream(ms);

    Le Helper est une class et photo est declarer dans la class

    Merci


    Daniel

    jeudi 28 juin 2012 10:37
  • Bonjour demarre une transaction

    SqlTransaction trans:

    trans = cn.BeginTransaction():

    cmd.Transaction = trans;

                                               Ta requete

    avant cn.Close();

    Faire trans.save(); ou trans.comit();

    Tout ira pour le mieux

    Merci

    jeudi 28 juin 2012 16:44
  • La premiere solution l'image est dans la BD tu peux l'appeler 

    picturebox.Image = dgvContacts.SelectedRows[0].Cells["Image"].Value;

    Ou dans ta BD met le chemin de l'image comme string et utilise le HTML, ASP ou ce que tu veux avec :

    imagesource = ".........."

    C'est plus simple

    jeudi 28 juin 2012 16:47
  • Bonjour,

    Préférez dans ce cas la méthode suivante :

    TypeDescriptor.GetConverter(typeof(Image)).ConvertFrom(dgvContacts.SelectedRows[0].Cells["Image"].Value);

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    vendredi 29 juin 2012 07:27
    Modérateur